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