La fonction ddply(), faisant partie du package plyr, permet d’appliquer une fonction à une ou plusieurs colonnes d’un data.frame en fonction des modalités d’une ou deux variables, et d’ajouter ces données à ce data.frame. library(plyr)        # On charge le package plyr #On construit un data.frame : dfx <- data.frame(     group <- c(rep(‘A’, 8), rep(‘B’, 15), rep(‘C’, 6)),     sex <- sample(c(« M », « F »), size = 29, replace = TRUE),     age <- runif(n = 29, min = 18, max = 54))   ddply(dfx, .(group, sex), mutate,     mean = round(mean(age), 2),     sd = round(sd(age), 2)) # On obtient laRead More →

La fonction ddply(), faisant partie du package plyr, permet d’appliquer une fonction à des subdivisions d’un data.frame library(plyr) # On charge le package plyr # On construit un data.frame dfx <- data.frame(     group <- c(rep(‘A’, 8), rep(‘B’, 15), rep(‘C’, 6)),     sex <- sample(c(« M », « F »), size = 29, replace = TRUE),     age <- runif(n = 29, min = 18, max = 54)) ddply(dfx, .(group), summarize,       mean = round(mean(age), 2),       sd = round(sd(age), 2)) # On obtient la moyenne et l’écart type associé à l’âge en fonction du groupe ddply(dfx, .(group, sex), summarize,    Read More →

L’import de fichier Excel dans R a toujours été un peu laborieuse, plusieurs façons de faire plus ou moins compliquées. Une fonction sort du lot readWorksheetFromFile du package XLconnect library(XLConnect) dataset<-readWorksheetFromFile(file="http://www.euklems.net/data/nace2/fra_output_12i.xlsx ", sheet=3) head(dataset)Read More →

Il n ‘y en a pas…ou si peu. La seule différence est que require est a utiliser dans le corps d ‘une fonction , qui affichera un message d’erreur si le package n’existe pas mais continuera son execution mafunc<-function(a){require(bidul)print(a)}mafunc2<-function(a){library(bidul)print(a)}mafunc(« coucou »)mafunc2(« coucou ») require peut ausi etre utilisé pour tester l’existence d’un package puique qu’il va retourner TRUE ou FALSE alors que library ne renvoie rienRead More →

Parfois on peut être ammené à vouloir lire le code source d’une fonction.(pour s’en inspirer, la comprendre ou la modifier)Mais il est possible que ce code ne soit pas directement accessible, et il peut etre laborieux de le retrouver. La fonction getAnywhere fait le travail pour nous. Exemple comment voir le code source de la fonction print.surfit du package survival library(survival)print.survfit # introuvable survival::print.survfit  #ne fonctionne pasgetAnywhere(print.survfit) # eureka Fonction à avoir sous le coude…Read 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 →

Les packages contiennent un certain nombre de fonctions. Il peut être intéressant de voir comment elles sont codées, pour les comprendre ou les améliorer par exemple. #il suffit de taper son nomlm  # affiche le code source de la fontion lmpage(lm) # affiche une nouvelle fenêtre avec le code source bien mis en forme (avec indentation)dput(lm, control = « useSource ») # permet de voir les commentaires s’il y en a, en pratique page utilise dputpage(lm, control = « useSource ») # cela fonctionne donc aussi.Read More →

Le diagramme Quantile-Quantile est un outil graphique qui permet de comparer la pertinence de l’ajustement de données à un modèle théorique (loi de probabilité). Cela peut se révéler très pratique pour analyser la normalité des résidus d’un modèle linéaire par exemple. Cet outil permet également de comparer deux distributions : un alignement selon la première bissectrice indique la présence d’une identité de loi. R présente des fonctions de bases permettant de tracer des QQplot : qqplot produit un QQplot de deux jeux de donnéesqqnorm produit un QQplot pour une loi normaleqqline trace la droite de Henry Voyons un exemple d’utilisation #nombres aléatoires tirés d’une loi#normaleRead More →

On cherche souvent à modéliser un échantillon par une loi de probabilité. A partir d’un jeu de données, comment peut-on trouver les paramètres d’une loi préalablement fixée? Plusieurs méthodes peuvent être utilisées. On prend l’exemple ici du délai entre l’infection d’un individu et la détection de cet individu comme malade.On modélise ici ce délai (en jours) par une loi de Weibull (on peut aussi essayer les lois gamma et lognormale par exemple) La méthode la plus simple est d’utiliser la fonction fitdistr du package MASS.Cette fonction permet d’ajuster de nombreuses lois par maximum de vraisemblance. Regardons ce que ça donne pour une loi Weibull. #onRead More →