Ricerca Sociale con R

Una wiki per l'analisi dei dati con R

Strumenti Utente

Strumenti Sito


r:comandi:cicli_lapply_sapply

I cicli con lapply e sapply

lapply() e sapply() applicano iterativamente una funzione a tutti gli elementi di un oggetto (vettore, o lista di vettori, matrice, ecc.), restituendo come risultato una lista (lapply) o un oggetto “semplificato”, ovvero trasformato dove possibile in array (vettore o matrice: sapply).

Vedi anche:

lapply

La sintassi di lapply() prevede di indicare l'oggetto, poi la funzione da applicare a tutti gli elementi dell'oggetto, ed eventualmente gli argomenti della funzione:

lapply(X, FUN, ...)

Ad esempio, scrivendo:

lapply(mtcars, mean)

otterremo una lista con i risultati:

$mpg
[1] 20.09062

$cyl
[1] 6.1875

$disp
[1] 230.7219

$hp
[1] 146.6875

...

Usare lapply() equivale qui ad applicare un ciclo for:

res <- list()
for (i in seq_along(mtcars)) {
  res[i] <- mean(mtcars[[i]])
}
names(res) <- names(mtcars)
res

Volendo aggiungere gli argomenti della funzione, scriveremo:

lapply(mtcars, mean, na.rm = T)

sapply

sapply() è come lapply, con la differenza che il risultato viene trasformato in un vettore o in una matrice (simplify = TRUE).

La sintassi della funzione è pertanto:

sapply(X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)

sapply(*, simplify = FALSE, USE.NAMES = FALSE) equivale lapply(*).

Il comando

sapply(mtcars, mean)

restituisce in questo caso il vettore dei risultati:

       mpg        cyl       disp         hp       drat         wt       qsec 
 20.090625   6.187500 230.721875 146.687500   3.596563   3.217250  17.848750 
        vs         am       gear       carb 
  0.437500   0.406250   3.687500   2.812500 

Ed equivale a:

res <- array()
for (i in seq_along(mtcars)) {
  res[i] <- mean(mtcars[[i]])
}
names(res) <- names(mtcars)

Anche in questo caso, gli argomenti delle funzioni seguono il nome della funzione:

sapply(mtcars, mean, na.rm =TRUE)

Qui applichiamo la funzione per standardizzare i valori:

sapply(mtcars, scale)

e otteniamo una matrice:

              mpg        cyl        disp          hp        drat ...
 [1,]  0.15088482 -0.1049878 -0.57061982 -0.53509284  0.56751369 ...
 [2,]  0.15088482 -0.1049878 -0.57061982 -0.53509284  0.56751369 ...
 [3,]  0.44954345 -1.2248578 -0.99018209 -0.78304046  0.47399959 ...
 [4,]  0.21725341 -0.1049878  0.22009369 -0.53509284 -0.96611753 ...
 [5,] -0.23073453  1.0148821  1.04308123  0.41294217 -0.83519779 ...
 [6,] -0.33028740 -0.1049878 -0.04616698 -0.60801861 -1.56460776 ...
...

Nell'esempio che segue, con la funzione per calcolare i quantili, otteniamo una matrice in cui i nomi di colonna sono i nomi delle variabili e quelli di riga sono i nomi dei risultati:

sapply(mtcars, quantile)
        mpg cyl    disp    hp  drat      wt    qsec vs am gear carb
0%   10.400   4  71.100  52.0 2.760 1.51300 14.5000  0  0    3    1
25%  15.425   4 120.825  96.5 3.080 2.58125 16.8925  0  0    3    2
50%  19.200   6 196.300 123.0 3.695 3.32500 17.7100  0  0    4    2
75%  22.800   8 326.000 180.0 3.920 3.61000 18.9000  1  1    4    4
100% 33.900   8 472.000 335.0 4.930 5.42400 22.9000  1  1    5    8

La funzione restituisce infatti un vettore di elementi con un nome:

quantile(mtcars$mpg)
    0%    25%    50%    75%   100% 
10.400 15.425 19.200 22.800 33.900 

Domande? Scrivimi

Messenger Telegram Email
r/comandi/cicli_lapply_sapply.txt · Ultima modifica: 11/08/2025 14:35 da Agnese Vardanega