Cours 5: Programmation dans R XIII- Boucles XIV
Transcription
Cours 5: Programmation dans R XIII- Boucles XIV
Cours 5: Programmation dans R XIII- Boucles XIV- Programme R XV- Fonctions XVI- Fonctions de base XIII- Boucles et Tests R possède des instructions qui rappellent le langage C. Principales instructions : for( in ) { }: exécute une instruction sur certaines valeurs while( ) { } : exécute une instruction tant qu’elle est vraie if() … else : Exécutions conditionnelles NB : Dans de nombreux cas, les boucles peuvent être évitées grâce à la vectorisation et à l’utilisation de fonctions, plus simples et moins coûteuses en temps. (fonctions de type apply() très utile). NB : Si l’on crée des objets dans une boucle, il faut toujours les définir avant. XIII- Boucles et Tests Exemple 1 : on crée un vecteur valant 0 si x vaut 3, 1 sinon, et on l’additionne avec x Solution 1 : Boucle Solution 2 : Vectorisation >x=sample(1:10,10, rep=T);x [1] 7 3 5 7 6 3 1 1 6 9 >y=numeric(length(x)) > for( i in 1:length(x)) {if (x[i]==3) y[i]=0 else y[i]=1};y [1] 1 0 1 1 1 0 1 1 1 1 >z=numeric(length(x)) >for(i in 1:length(x)) { z[i]=x[i]+y[i]};z [1] 8 3 6 8 7 3 2 2 7 10 >x=sample(1:10,10, rep=T);x >y[x==3]=0 >y[x!=3]=1 >z=x+y XIII- Boucles et Tests Exemple 2 : somme sur les colonnes d’une matrice. Solution 1 : Boucle >M=matrix(sample(1:10, 20, rep=T),5,4) M [,1] [,2] [,3] [,4] [1,] 1 4 3 7 [2,] 1 8 3 5 [3,] 10 5 5 4 [4,] 2 6 5 2 [5,] 3 9 2 10 >SM=numeric(length(ncol(M))) >for(j in 1:ncol(M)){SM[j]=sum(M[,j])} [1] 17 32 18 28 Solution 2 : Fonction >M=matrix(sample(1:10, 20, rep=T),5,4) >SM=Apply(M,2,sum) XIV- Ecrire un programme R Un programme R est une série d’instructions sauvées dans un fichier texte (.txt ou .R), paramétrables à l’aide de vecteurs. Le programme est rappelé dans R en utilisant la fonction source(). Utile lorsqu’on veut exécuter une même tache plusieurs fois IV- Ecrire un programme R Exemple : On veut exécuter le même graphique plusieurs fois, pour 3 espèces d’oiseaux différentes, contenues dans 3 fichiers différents Solution 1 : directe >layout(matrix(1:3,3,1)) #partitionne le #graphe : idem split.screen(c(3,1)) Solution 2 : écriture d’un programme R stocké dans "mybirds.txt« ----------------------------------- >data=read.table("Swal.txt") layout(matrix(1:3,3,1)) v1 2 4 5 8 10 v2 1 1 2 1 1 >barplot(data$V2, data$V1) >title("Swallow") >data=read.table("Wren.txt") v1 2 3 4 5 6 v2 1 1 1 1 1 1 >barplot(data$V2,data$V1) >title("Wren") >data=read.table("Dunn.txt") v1 4 5 8 10 v2 2 2 1 1 >barplot(data$V2,data$V1) >title("Dunnock") file=c("Swal.txt","Wren.txt", "Dunn.txt ") species=c("swallow", "wren", "dunnock") for (i in 1:length(species)) { data=read.table( file[i]) barplot(data$V2,data$V1) title(species[i]) } -------------------------------------------------->source("mybirds.txt") NB : Les noms de fichier et d’espèce sont les paramètres du programme., mais ils sont fixes. Ils sont stockés dans des vecteurs de mode caractère. XIV- Ecrire un programme R XV- Fonctions R Si on veut pouvoir utiliser un programme autant que l’on veut en changeant à loisir ses paramètres, on écrit plutôt une fonction. Les fonctions écrites auront les mêmes propriétés que celles de R. Une fonction est un programme R comportant des paramètres variables, donnés dans l’instruction function() qui amorce l’écriture d’une fonction. Syntaxe : nom_fonction=fonction(p1,p2,p3,…) { } XV- Fonctions R Pour pouvoir être exécutée, une fonction doit être chargée en mémoire, cela peut se faire de plusieurs façons: Entrer les lignes au clavier, les copier /coller à partir d’un éditeur Enregistrer la fonction dans un fichier ascii et la charger par la commande source() Si on souhaite que la fonction soit chargée au démarrage, on peut l’enregistrer dans un fichier avec l’extension .Rdata qui sera chargé en mémoire s’il est localisé dans le répertoire de travail de démarrage ( getwd()) XV- Fonctions R Solution 3: Ecriture d’une fonction (myfun) stockée dans "myfun.txt" myfun=function(S,F) { data=read.table( F) barplot(data$V2,data$V1) title(S) } >layout(matrix(1:3,3,1)) >source("myfun.txt") >myfun("swallow", "Swal.txt") >myfun("wren", "Wren.txt") >myfun("dunnock", "Dunn.txt") XV- Fonctions R Il y a deux manières de spécifier les paramètres d’une fonction fonc=function(p1,p2,p3): - par leur position: fonc(x,y,z) (~fonc(p1=x,p2=y,p3=z); - par leur nom: fonc(p2=y,p1=x,p3=z); On peut définir des paramètres par défaut: fonc=function(p1=1:2,p2=c(T,F),p3=c("1", "3")). print() affiche le contenu d ’un objet dans une fonction XV- Fonctions R • Utilisation de print >carre=function(x){print(x*x)} >carre(3) [1] 9 • Utilisation classique >msd(1:10) msd=function(x) {moyenne=mean(x) etype=sd(x) print(c(moyenne,etype))} [1] 5.500000 3.027650 • Arguments par défaut : msd=function(x=1:10) {moyenne=mean(x) etype=sd(x) print(c(moyenne,etype)) } >msd() [1] 5.500000 3.027650 >msd(1:100) [1] 50.50000 29.01149 XVI- Fonctions mathématiques de base sum(x) Somme des éléments de x prod(x) Produit des éléments de x max(x), min(x) Maximum, minimum des éléments de x which.max(x) Retourne l’indice du maximum des éléments de x which.min(x) Retourne l’indice du minimum des éléments de x range(x) Idem que c(min,max) mean(x) Moyenne des éléments de x median(x) Médiane des éléments de x var(x) ou cov(x) Variance des éléments de x(calculée sur n-1) matrice des var et cov si x est une matrice cor(x) Matrice de corrélation si x est une matrice ou un data frame sd(x) Ecart-type des éléments de x XVI- Fonctions mathématiques de base round(x,n) Arrondit les éléments de x à n chiffres après la virgule rev(x) Inverse l’ordre des éléments de x sort(x) Trie les éléments de x dans l’ordre ascendant rank(x) Range les éléments de x scale(x) Centre et réduit les données pmin(x,y,…) Un vecteur dont le iéme élément est le minimum entre x[i] et y[i] cumsum(x) Un vecteur dont le ieme élément est la somme de x[1]à x[i] cumprod(), cummin(),cummax() Idem pour produit, minimum, maximum match(x,y) Retourne un vecteur de meme longueur que x contenant les éléments de x qui sont dans y XVI- Fonctions mathématiques de base choose(n,k) Coefficient binomial Cnk na.omit() Supprime les observations avec données manquantes na.fail() Retourne un message d’erreur si x contient au moins un NA unique() Si x est un vecteur ou un data frame, retourne un objet similaire mais avec les éléments dupliqués supprimés table() Retourne un tableau des effectifs des différentes valeurs de x subset() Retourne une sélection de x en fonction de critères sample(x,size) Ré-échantillonnage aléatoire et sans remise de size éléments dans x