Chapitre 7 Les fonctions apply
La famille des fonctions apply
est intégrée dans le package base déjà chargé en mémoire dans RStudio.
Ces fonctions évitent d’avoir recours aux boucles.
Dans ce TP, nous aborderons uniquement les fonctions apply
, lapply
et tapply
. Mais, il en existe d’autres telles que sapply
, mapply
, vapply
, etc.
7.1 Fonction apply
La fonction apply
est la fonction de base des fonctions de cette famille.
Elle est utile pour appliquer une fonction sur chaque colonne d’une matrice. L’argument MARGIN
permet de préciser si on veut appliquer la fonction mean
pour chaque ligne ou chaque colonne.
Ici l’objet X convertit le data frame en matrice, c’est pourquoi la fonction apply
renvoie que des vecteurs de type character
.
apply(X = iris, MARGIN = 2, FUN = class)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## "character" "character" "character" "character" "character"
apply(X = iris[, 1:4], MARGIN = 2, FUN = mean)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## 5.843333 3.057333 3.758000 1.199333
7.2 Fonction lapply
La fonction lapply
se construit de la même façon que la fonction apply
à l’exception que le résultat renvoyé est une liste
La fonction lapply
prend en entrée une liste, un vecteur ou un data frame / matrice contrairement à la fonction apply
.
lapply(X = iris , function(x) class(x))
## $Sepal.Length
## [1] "numeric"
##
## $Sepal.Width
## [1] "numeric"
##
## $Petal.Length
## [1] "numeric"
##
## $Petal.Width
## [1] "numeric"
##
## $Species
## [1] "factor"
lapply(X = colnames(iris) , function(x) summary(iris[,x]))
## [[1]]
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.300 5.100 5.800 5.843 6.400 7.900
##
## [[2]]
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.000 2.800 3.000 3.057 3.300 4.400
##
## [[3]]
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 1.600 4.350 3.758 5.100 6.900
##
## [[4]]
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.100 0.300 1.300 1.199 1.800 2.500
##
## [[5]]
## setosa versicolor virginica
## 50 50 50
Quand on regarde de plus près, on se rend compte, que ces fonctions peuvent jouer le même rôle qu’une boucle.
lapply(X = colnames(iris) , function(x) x)
## [[1]]
## [1] "Sepal.Length"
##
## [[2]]
## [1] "Sepal.Width"
##
## [[3]]
## [1] "Petal.Length"
##
## [[4]]
## [1] "Petal.Width"
##
## [[5]]
## [1] "Species"
7.3 Fonction sapply
La fonction sapply est similaire à la fonction lapply sauf qu’elle ne retourne pas de liste mais un vecteur ou une matrice.
sapply(X = iris , function(x) class(x))
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## "numeric" "numeric" "numeric" "numeric" "factor"
7.4 Fonction tapply
La fonction tapply
adopte la même approche que la fonction aggregate
. Elle permet d’agréger des données. Les arguments de la fonction d’agrégation sont renseignés dans la fonction tapply
et non dans la fonction d’agrégation.
tapply(X = iris$Sepal.Length, INDEX = iris$Species, FUN = mean, na.rm = TRUE)
## setosa versicolor virginica
## 5.006 5.936 6.588
7.5 Exercice
7.5.1 Sujet
Calculez le taille moyenne pour chaque race de personnage Star Wars (
species
)Appliquez la fonction
build_plot
sur le data frame Star Wars en utilisant la fonction lapply.Calculer la moyenne de chaque variable numérique en utilisant la fonction
sapply
etlapply
.
7.5.2 Correction
- Calculez le taille moyenne pour chaque race de personnage Star Wars (
species
)
tapply(X = starWars$height, INDEX = starWars$species, FUN = mean, na.rm = TRUE)
- Appliquez la fonction
build_plot
sur le data frame Star Wars en utilisant la fonction lapply.
lapply(X = starWars, function(x) build_plot(x))
- Calculer la moyenne de chaque variable numérique en utilisant la fonction
sapply
etlapply
.
<- sapply(X = starWars, function(x) is.numeric(x))
col_numeric lapply(X = starWars[ ,col_numeric], function(x) mean(x, na.rm = TRUE))