Un guide pour apply(), lapply(), sapply() et tapply() dans R
Ce didacticiel explique les différences entre les fonctions R intégrées apply() , sapply() , lapply() et tapply() ainsi que des exemples de quand et comment utiliser chaque fonction.
appliquer()
Utilisez la fonction apply() lorsque vous souhaitez appliquer une fonction aux lignes ou aux colonnes d’une matrice ou d’un bloc de données.
La syntaxe de base de la fonction apply() est la suivante :
appliquer (X, MARGE, FUN)
- X est le nom de la matrice ou du bloc de données
- MARGIN indique sur quelle dimension effectuer une opération (1 = ligne, 2 = colonne)
- FUN est l’opération spécifique que vous souhaitez effectuer (par exemple min, max, somme, moyenne, etc.)
Le code suivant illustre plusieurs exemples de apply() en action.
#create a data frame with three columns and five rows data <- data.frame(a = c(1, 3, 7, 12, 9), b = c(4, 4, 6, 7, 8), c = c(14, 15, 11, 10, 6)) data # a b c #1 1 4 14 #2 3 4 15 #3 7 6 11 #4 12 7 10 #5 9 8 6 #find the sum of each row apply(data, 1, sum) #[1] 19 22 24 29 23 #find the sum of each column apply(data, 2, sum) # a b c #32 29 56 #find the mean of each row apply(data, 1, mean) #[1] 6.333333 7.333333 8.000000 9.666667 7.666667 #find the mean of each column, rounded to one decimal place round(apply(data, 2, mean), 1) # a b c #6.4 5.8 11.2 #find the standard deviation of each row apply(data, 1, sd) #[1] 6.806859 6.658328 2.645751 2.516611 1.527525 #find the standard deviation of each column apply(data, 2, sd) # a b c #4.449719 1.788854 3.563706
appliquer()
Utilisez la fonction lapply() lorsque vous souhaitez appliquer une fonction à chaque élément d’une liste, d’un vecteur ou d’un bloc de données et obtenir une liste en conséquence.
La syntaxe de base de la fonction lapply() est la suivante :
lapply(X, AMUSANT)
- X est le nom de la liste, du vecteur ou du bloc de données
- FUN est l’opération spécifique que vous souhaitez effectuer
Le code suivant illustre plusieurs exemples d’utilisation de lapply() sur les colonnes d’un bloc de données.
#create a data frame with three columns and five rows data <- data.frame(a = c(1, 3, 7, 12, 9), b = c(4, 4, 6, 7, 8), c = c(14, 15, 11, 10, 6)) data # a b c #1 1 4 14 #2 3 4 15 #3 7 6 11 #4 12 7 10 #5 9 8 6 #find mean of each column and return results as a list lapply(data, mean) # $a # [1] 6.4 # # $b # [1] 5.8 # # $c # [1] 11.2 #multiply values in each column by 2 and return results as a list lapply(data, function(data) data*2) # $a # [1] 2 6 14 24 18 # # $b # [1] 8 8 12 14 16 # # $c # [1] 28 30 22 20 12
Nous pouvons également utiliser lapply() pour effectuer des opérations sur des listes. Les exemples suivants montrent comment procéder.
#create a list x <- list(a=1, b=1:5, c=1:10) x # $a # [1] 1 # # $b # [1] 1 2 3 4 5 # # $c # [1] 1 2 3 4 5 6 7 8 9 10 #find the sum of each element in the list lapply(x, sum) # $a # [1] 1 # # $b # [1] 15 # # $c # [1] 55 #find the mean of each element in the list lapply(x, mean) # $a # [1] 1 # # $b # [1] 3 # # $c # [1] 5.5 #multiply values of each element by 5 and return results as a list lapply(x, function(x) x*5) # $a # [1] 5 # # $b # [1] 5 10 15 20 25 # # $c # [1] 5 10 15 20 25 30 35 40 45 50
appliquer()
Utilisez la fonction sapply() lorsque vous souhaitez appliquer une fonction à chaque élément d’une liste, d’un vecteur ou d’un bloc de données et obtenir ainsi un vecteur au lieu d’une liste.
La syntaxe de base de la fonction sapply() est la suivante :
appliquer (X, AMUSANT)
- X est le nom de la liste, du vecteur ou du bloc de données
- FUN est l’opération spécifique que vous souhaitez effectuer
Le code suivant illustre plusieurs exemples d’utilisation de sapply() sur les colonnes d’un bloc de données.
#create a data frame with three columns and five rows data <- data.frame(a = c(1, 3, 7, 12, 9), b = c(4, 4, 6, 7, 8), c = c(14, 15, 11, 10, 6)) data # a b c #1 1 4 14 #2 3 4 15 #3 7 6 11 #4 12 7 10 #5 9 8 6 #find mean of each column and return results as a vector sapply(data, mean) # a b c #6.4 5.8 11.2 #multiply values in each column by 2 and return results as a matrix sapply(data, function(data) data*2) # a b c #[1,] 2 8 28 #[2,] 6 8 30 #[3,] 14 12 22 #[4,] 24 14 20 #[5,] 18 16 12
Nous pouvons également utiliser sapply() pour effectuer des opérations sur des listes. Les exemples suivants montrent comment procéder.
#create a list x <- list(a=1, b=1:5, c=1:10) x # $a # [1] 1 # # $b # [1] 1 2 3 4 5 # # $c # [1] 1 2 3 4 5 6 7 8 9 10 #find the sum of each element in the list sapply(x, sum) # a b c # 1 15 55 #find the mean of each element in the list sapply(x, mean) # a b c #1.0 3.0 5.5
tapoter()
Utilisez la fonction tapply() lorsque vous souhaitez appliquer une fonction à des sous-ensembles d’un vecteur et que les sous-ensembles sont définis par un autre vecteur, généralement un facteur.
La syntaxe de base de la fonction tapply() est la suivante :
tapoter(X, INDEX, FUN)
- X est le nom de l’objet, généralement un vecteur
- INDEX est une liste d’un ou plusieurs facteurs
- FUN est l’opération spécifique que vous souhaitez effectuer
Le code suivant illustre un exemple d’utilisation de tapply() sur l’ensemble de données R intégré iris .
#view first six lines of iris dataset head(iris) # Sepal.Length Sepal.Width Petal.Length Petal.Width Species #1 5.1 3.5 1.4 0.2 setosa #2 4.9 3.0 1.4 0.2 setosa #3 4.7 3.2 1.3 0.2 setosa #4 4.6 3.1 1.5 0.2 setosa #5 5.0 3.6 1.4 0.2 setosa #6 5.4 3.9 1.7 0.4 setosa #find the max Sepal.Length of each of the three Species tapply(iris$Sepal.Length, iris$Species, max) #setosa versicolor virginica # 5.8 7.0 7.9 #find the mean Sepal.Width of each of the three Species tapply(iris$Sepal.Width, iris$Species, mean) # setosa versicolor virginica # 3.428 2.770 2.974 #find the minimum Petal.Width of each of the three Species tapply(iris$Petal.Width, iris$Species, min) # setosa versicolor virginica # 0.1 1.0 1.4