Aymeric Inpong" Bonjour Claire, Je profite régulièrement de vos articles pour améliorer ma programmation en R (plutôt artisanale) d'analyses multivariées. J'utilise des boucles, doubles ou triples, ce qui entraîne de long calculs.
- Lapply sous r llye scientifique des
Lapply Sous R Llye Scientifique Des
La lettre l devant le apply correspond à ` list` Par défaut, les résultats sont également fournis sous forme d'une liste: maliste <- list(E1=rnorm(10), E2=1:10, E3=runif(10))
maliste
## $E1
## [1] -1. 7984349 0. 6276849 0. 7310556 1. 1642278 -1. 0313113 0. 1958217
## [7] -1. 9018991 -1. 8122020 -0. 3482781 -1. 2713203
##
## $E2
## [1] 1 2 3 4 5 6 7 8 9 10
## $E3
## [1] 0. 723830546 0. 838541188 0. 845484439 0. 039995958 0. 615807877 0. 917093245
## [7] 0. 867372951 0. 224336368 0. 001643635 0. 081938347
lapply(maliste, mean)
## [1] -0. 5444656
## [1] 5. 5
## [1] 0. R pour les nuls: La fonction apply(). 5156045
Si on utilise une fonction qui nécessite des arguments, il faut les indiquer après la fonction, comme ici avec la fonction quantile() et l'argument probs. lapply(maliste, quantile, probs=c(0. 25, 0. 75))
## 25% 75%
## -1. 6666563 0. 5197191
## 3. 25 7. 75
## 0. 1175379 0. 8437486 On peut également obtenir les résultats sous la forme d'un vecteur en employant la fonction unlist() en amont: unlist(lapply(maliste, mean))
## E1 E2 E3
## -0.
6635282 5. 4673550
class(res)
## [1] "numeric" La fonction sapply fait donc la même chose que la fonction lapply, mais en fournissant directement un vecteur en sortie! Un vecteur… une matrice, si la fonction renvoie plusieurs éléments: res <- sapply(maliste, quantile, probs=c(0. 75))
## 25% -1. 20998298 3. 25 0. 2139582
## 75% 0. 04138477 7. 75 0. 7128085
## [1] "matrix" "array" Pas super simplifié, quand même! La fonction tapply permet d'appliquer une fonction sur une variable, par sous-groupe de données, que l'on spécifie en argument. Comment faire des comptages dans un data.frame ? apply, lapply, sapply, which - Astuces et scripts R. Et les résultats sont fournis sous une structure de type array. Par exemple, on peut obtenir la moyenne des longueurs de sépale pour chaque espèce d'iris: res <- tapply(iris$, iris$Species, mean)
## setosa versicolor virginica
## 5. 006 5. 936 6. 588
## [1] "array" C'est l' équivalent de la fonction by(), mais sans la mise en forme: by(iris$, iris$Species, mean)
## iris$Species: setosa
## [1] 5. 006
## ------------------------------------------------------------
## iris$Species: versicolor
## [1] 5.