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 

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *