Lorsque l’on réalise des scripts qui vont tourner un certain temps avant d’aboutir au résultat final, il est essentiel d’en optimiser le fonctionnement pour gagner du temps. Il nous faut pour cela un bon indicateur : comment savoir le temps que dure une fonction ou un script ? Vous pouvez utiliser la fonction system.time system.time(for ( i in 1:10000){print(i)})system.time(for ( i in 1:10000){cat(i)})Read More →

L’objectif est de calculer une moyenne sur des réplicats techniques/biologiques.Tous les réplicats d’une condition doivent avoir le même nom. Tout d’abord on crée une matrice d’accueil pour les résultats.Nombre de niveaux : le tableau initial contient y réplicats pour z conditions, donc y * z lignes.La matrice d’accueil n’aura donc plus que z lignes. Prenons l’exemple du jeu de données « iris ».Calculons les moyennes par variété pour chaque variable. data(iris)niveaux<-length(levels(iris$Species))iris.moyenne<-matrix(nrow=niveaux, ncol=(ncol(iris)-1))#ensuite on calcule la moyenne pour chaque condition, par variablefor (i in 1:(ncol(iris)-1)){iris.moyenne[,i]<-tapply(iris[,i], iris$Species, mean)}#il n’y a plus qu’à améliorer l’allure des résultatscolnames(iris.moyenne)<-colnames(iris[, 1:4])rownames(iris.moyenne)<-levels(iris$Species)iris.moyenne On peut également créer une matrice pour des écarts-types par exemple, en remplaçantRead More →

Pour comparer 2 moyennes, vous pouvez utiliser le test de student. On se place dans le cas où l’on a deux séries de valeurs dont on veut comparer la moyenne.Les conditions pour utiliser ce test sont en pratique très peu contraignantes et il n’est pas vraiment nécessaire de s’embêter avec la normalités des données car : le test de student est très robuste à la non normalité des données dès que l’on a plus de 30 individus (n peut même descendre à 15), on a toujours quelque chose qui suit (plus ou moins) une loi normale les tests de normalité sont très très peu puissantsRead More →

Il peut être pratique parfois de créer un facteur  correspondant à l’interaction de 2 facteurs. Pour cela vous pouvez utiliser tout simplement la fonction interaction() x=letters[rep(seq(from=1,to=5,by=1),rep(5,5))]y=rep(seq(from=1,to=5,by=1),5)interaction(x,y,sep= »_ »)#où sep est le séparateur entre les deux charactèresRead More →

Lorsque l’on manipule des jeux de données on est souvent amené à vouloir rajouter des colonnes, rajouter des lignes concaténer des jeux de données… Pour rajouter des colonnes, il faut utiliser la fonction cbind. Il faut que les 2 jeux de données aient le même nombre de ligne.cbind rajoute les colonnes par la droite. deuxcolonnes<-data.frame(matrix(« x »,150,2))names(deuxcolonnes)<-c(« colonne1″, »colonne2 »)deuxcolonnesrescol<-cbind(iris,deuxcolonnes)head(rescol)  Pour rajouter des lignes il faut utiliser la fonction rbind. Contrainte : il faut avoir le même nombre de colonnes et que ces colonnes aient le même nom. deuxlignes<-data.frame(matrix(1,2,5))names(deuxlignes)<-names(iris)deuxlignesreslign<-rbind(deuxlignes,iris)head(reslign)  Il faut tout de même veiller à conserver une homogénéité dans les variables (rajouter des character dans une colonne de numericRead More →

Le critère d’Akaike (AIC) est un critère utilisé pour la sélection de modèles. Ce critère représente un compromis entre le biais diminuant avec le nombre de paramètres libres et la parcimonie, volonté de décrire les données avec le plus petit nombre de paramètres possible. Il se calcule de la façon suivante -2log-likelihood + knpar. Par défaut on a souvent k=2. Le meilleur modèle est celui qui possède l’AIC le plus faible. On obtient ce critère en utilisant la fonction AIC(objet,k=?), k=2 par défaut. Prenons un exemple library(MASS) #pour la fonction fitdistr #  z est un vecteur contenant les données, on essaie de modéliser ces données parRead More →

Il existe plusieurs façons de représenter des surfaces en 3D. Je vous en propose une qui utilise la fonction de base persp(). #on construit les fonctions à représenter f1 et f2 f1<-function(x,y){    15*sin(sqrt(x^2+y^2))}################mu1<-0 mu2<-0 s11<-15 s12<-20 s22<-10 rho<-0.5 f2<-function(x,y){term1<-1/(2*pi*sqrt(s11*s22*(1-rho^2)))term2<–1/(2*(1-rho^2))term3<-(x-mu1)^2/s11term4<-(y-mu2)^2/s22term5<–2*rho*((x-mu1)*(y-mu2))/(sqrt(s11)*sqrt(s22))term1*exp(term2*(term3+term4-term5))}# on définit deux vecteurs correspondant aux axes x et yx<-seq(-15,15,length=50)y<-x# on calcule la valeur de z=f(x,y) pour tous les couples x[i],y[i] avec la fonction outerz1<-outer(x,y,f1)z2<-outer(x,y,f2)#on utilise la fonction perspx11()persp(x,y,z1,theta=30,phi=40,expand=0.5,col= »lightblue »,ticktype= »detailed »)x11()persp(x,y,z2,theta=40,phi=30,expand=0.5,col= »lightgreen »,ticktype= »detailed ») Il est possible d’ajouter des points au graphique en utilisant points(trans3d()).Regardez bien tous les arguments de la fonction persp() : ?persp. Ils sont nombreux et vous permettront d’obtenir votre surface sous l’angle que vous voulez. Enfin ilRead More →

R permet de faire beaucoup de chose avec les graphiques mais il faut coder ce qu’on veut faire. Nous allons voir ici comment ajouter des courbes, des points et des droites sur un plot. #on crée des données pour l’exemple x<-seq(0:100)a<-2b<-5y1<-a*x+by2<-a*x^0.5+by3<-a*x^0.3+b*xynoisy1<-y1+rnorm(length(y1),sd=0.2*y1)ynoisy2<-y2+rnorm(length(y2),sd=0.2*y2)ynoisy3<-y3+rnorm(length(y3),sd=0.2*y3)#étape 1 on trace la fonction y1 avec un plotplot(y1~x,type=’l’,col= »green »,lwd=2,ylim=c(0,300))#étape 2 on veut ajouter les fonctions y2 et y3 sur le même graphiques : on utilise lineslines(y2~x,type=’l’,col= »blue »,lwd=2)lines(y3~x,type=’l’,col= »purple »,lwd=2)#étape 3 on veut ajouter les nuages de point ynoisy1 2 et 3 sur le graphique: on utilise pointspoints(ynoisy1~x,pch=20,col= »grey »)points(ynoisy2~x,pch=20,col= »black »)points(ynoisy3~x,pch=22,col= »black »)#étape 4 on veut ajouter une droite verticale pour x=50 : on utilise abline(v=) v pour vertical abline(v=50,col= »red »)#étape 5 on veutRead More →

R est un langage itératif, c’est a dire que le logiciel va interpréter une ligne de code après l’autre.Pour gagner de la place, on peut vouloir écrire une série d’opérations sur une seule ligne. On perd en lisibilité, mais pour les choses simples cela peut être pratique. rm(list=ls(all=TRUE))a<-5b<-7# peut s’écrire sur une ligne grace au séparateur ;rm(list=ls(all=TRUE));a<-5;b<-7 # pour les boucles for while ou les if, on peut compresser comme cela x<-10for ( i in 1:10){print(i)x<-x*iprint(x)print(« coucou »)} # s’écrit en une lignex<-10;for ( i in 1:10){print(i);x<-x*i;print(x);print(« coucou »)}  Read More →