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

  1. Calculez le taille moyenne pour chaque race de personnage Star Wars (species)

  2. Appliquez la fonction build_plot sur le data frame Star Wars en utilisant la fonction lapply.

  3. Calculer la moyenne de chaque variable numérique en utilisant la fonction sapply et lapply.

7.5.2 Correction

  1. Calculez le taille moyenne pour chaque race de personnage Star Wars (species)
tapply(X = starWars$height, INDEX = starWars$species, FUN = mean, na.rm = TRUE)
  1. Appliquez la fonction build_plot sur le data frame Star Wars en utilisant la fonction lapply.
lapply(X = starWars, function(x) build_plot(x))
  1. Calculer la moyenne de chaque variable numérique en utilisant la fonction sapply et lapply.
col_numeric <-  sapply(X = starWars, function(x) is.numeric(x))
lapply(X = starWars[ ,col_numeric], function(x) mean(x, na.rm = TRUE))