Comment appliquer une fonction à chaque ligne d’une matrice ou d’un bloc de données dans R



Vous pouvez utiliser la fonction apply() pour appliquer une fonction à chaque ligne d’une matrice ou d’un bloc de données dans R.

Cette fonction utilise la syntaxe de base suivante :

appliquer (X, MARGE, FUN)

où:

  • X : Nom de la matrice ou du bloc de données.
  • MARGE : Dimension sur laquelle effectuer l’opération. Utilisez 1 pour la ligne, 2 pour la colonne.
  • FUN : La fonction à appliquer.

Les exemples suivants montrent comment utiliser cette syntaxe dans la pratique.

Exemple 1 : appliquer une fonction à chaque ligne de la matrice

Supposons que nous ayons la matrice suivante dans R :

#create matrix
mat <- matrix(1:15, nrow=3)

#view matrix
mat

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    4    7   10   13
[2,]    2    5    8   11   14
[3,]    3    6    9   12   15

Nous pouvons utiliser la fonction apply() pour appliquer différentes fonctions aux lignes de la matrice :

#find mean of each row
apply(mat, 1, mean)

[1] 7 8 9

#find sum of each row
apply(mat, 1, sum)

[1] 35 40 45

#find standard deviation of each row
apply(mat, 1, sd)

[1] 4.743416 4.743416 4.743416

#multiply the value in each row by 2 (using t() to transpose the results)
t(apply(mat, 1, function(x) x * 2))

     [,1] [,2] [,3] [,4] [,5]
[1,]    2    8   14   20   26
[2,]    4   10   16   22   28
[3,]    6   12   18   24   30

#normalize every row to 1 (using t() to transpose the results)
t(apply(mat, 1, function(x) x / sum(x) ))

           [,1]      [,2] [,3]      [,4]      [,5]
[1,] 0.02857143 0.1142857  0.2 0.2857143 0.3714286
[2,] 0.05000000 0.1250000  0.2 0.2750000 0.3500000
[3,] 0.06666667 0.1333333  0.2 0.2666667 0.3333333

Notez que si vous souhaitez trouver la moyenne ou la somme de chaque ligne, il est plus rapide d’utiliser les fonctions intégrées rowMeans() ou rowSums() :

#find mean of each row
rowMeans(mat)

[1] 7 8 9

#find sum of each row
rowSums(mat)

[1] 35 40 45

Exemple 2 : appliquer une fonction à chaque ligne du bloc de données

Supposons que nous ayons la matrice suivante dans R :

#create data frame
df <- data.frame(var1=1:3,
                 var2=4:6,
                 var3=7:9,
                 var4=10:12,
                 var5=13:15)

#view data frame
df

  var1 var2 var3 var4 var5
1    1    4    7   10   13
2    2    5    8   11   14
3    3    6    9   12   15

Nous pouvons utiliser la fonction apply() pour appliquer différentes fonctions aux lignes du bloc de données :

#find mean of each row
apply(df, 1, mean)

[1] 7 8 9

#find sum of each row
apply(df, 1, sum)

[1] 35 40 45

#find standard deviation of each row
apply(df, 1, sd)

[1] 4.743416 4.743416 4.743416

#multiply the value in each row by 2 (using t() to transpose the results)
t(apply(df, 1, function(x) x * 2))

     var1 var2 var3 var4 var5
[1,]    2    8   14   20   26
[2,]    4   10   16   22   28
[3,]    6   12   18   24   30

#normalize every row to 1 (using t() to transpose the results)
t(apply(df, 1, function(x) x / sum(x) ))

           var1      var2 var3      var4      var5
[1,] 0.02857143 0.1142857  0.2 0.2857143 0.3714286
[2,] 0.05000000 0.1250000  0.2 0.2750000 0.3500000
[3,] 0.06666667 0.1333333  0.2 0.2666667 0.3333333

Semblable aux matrices, si vous souhaitez trouver la moyenne ou la somme de chaque ligne, il est plus rapide d’utiliser les fonctions intégrées rowMeans() ou rowSums() :

#find mean of each row
rowMeans(df)

[1] 7 8 9

#find sum of each row
rowSums(df)

[1] 35 40 45

Ressources additionnelles

Comment récupérer les numéros de ligne dans R
Comment exécuter une fonction COUNTIF dans R
Comment exécuter une fonction SUMIF dans R

Ajouter un commentaire

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