Lapply vs sapply in r: qual è la differenza?


La funzione lapply() in R può essere utilizzata per applicare una funzione a ciascun elemento di una lista, vettore o frame di dati e ottenere una lista di conseguenza.

La funzione sapply() può essere utilizzata anche per applicare una funzione a ciascun elemento di una lista, vettore o frame di dati, ma come risultato restituisce un vettore .

Gli esempi seguenti mostrano come utilizzare ciascuna di queste funzioni in R.

Esempio: come utilizzare apply() in R

Il codice seguente mostra come utilizzare la funzione lapply() per moltiplicare ciascun valore in ciascuna colonna di un frame di dati per 2:

 #create data frame
df <- data. frame (x=c(1, 2, 2, 3, 5),
                 y=c(4, 4, 6, 7, 8),
                 z=c(7, 7, 9, 9, 9))

#view data frame
df

  X Y Z
1 1 4 7
2 2 4 7
3 2 6 9
4 3 7 9
5 5 8 9

#multiply each value in each column by 2
lapply(df, function (df) df*2)

$x
[1] 2 4 4 6 10

$y
[1] 8 8 12 14 16

$z
[1] 14 14 18 18 18

Tieni presente che il risultato è un elenco.

Esempio: come utilizzare sapply() in R

Il codice seguente mostra come utilizzare la funzione sapply() per moltiplicare ciascun valore in ciascuna colonna di un frame di dati per 2:

 #create data frame
df <- data. frame (x=c(1, 2, 2, 3, 5),
                 y=c(4, 4, 6, 7, 8),
                 z=c(7, 7, 9, 9, 9))

#view data frame
df

  X Y Z
1 1 4 7
2 2 4 7
3 2 6 9
4 3 7 9
5 5 8 9

#multiply each value in each column by 2
sapply(df, function (df) df*2)

      X Y Z
[1,] 2 8 14
[2,] 4 8 14
[3,] 4 12 18
[4,] 6 14 18
[5,] 10 16 18

Si noti che il risultato è una matrice vettoriale.

Tieni presente che puoi utilizzare as.data.frame() per restituire un frame di dati anziché una matrice:

 #multiply each value in each column by 2 and return a data frame
as. data . frame (sapply(df, function (df) df*2))

   X Y Z
1 2 8 14
2 4 8 14
3 4 12 18
4 6 14 18
5 10 16 18

Quando utilizzare lapply() o sapply()

Nel 99% dei casi utilizzerai sapply() perché ha più senso restituire un vettore o una matrice.

Tuttavia, in rare circostanze potrebbe essere necessario utilizzare lapply() se si desidera che il risultato sia un elenco.

Nota che sapply() e lappy() eseguono le stesse operazioni su un vettore, una matrice o un frame di dati. L’unica differenza sta nella classe dell’oggetto restituito.

Risorse addizionali

Come applicare una funzione a ciascuna riga di frame di dati in R
Come utilizzare la funzione colSums() in R
Come utilizzare la funzione rowSums() in R

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *