Pagina personale di:
Carlo Vecchio
appunti di C#, R, SQL Server, ASP.NET, algoritmi, numeri
Vai ai contenuti

R - Le funzioni *apply()

R

Le funzioni *apply()

Cosa sono le funzioni *apply()

  • Le funzioni *apply(), fanno parte del pacchetto base di R.
  • Sono state create per eseguire una funzione più volte su un oggetto, evitando l'uso del loop.
  • Esistono diverse funzioni *apply(), qui esaminiamo le seguenti: apply(), lapply().

apply()
  • Esegue una funzione alle righe o alle colonne di una matrice o un array.

apply(X, MARGIN, FUN)

  • X è una matrice o un array.
  • MARGIN è 1 (applica la funzione alle righe) o 2 (applica la funzione alle colonne).
  • FUN è la funzione da applicare.

# Crea una matrice con 3 righe e 4 colonne.
m <- matrix(1:12, nrow = 3)
print(m)
    [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12
# Calcola la somme delle righe.
apply(m, 1, sum)
[1] 22 26 30
# Calcola la somma delle colonne.
apply(m, 2, sum)
[1]  6 15 24 33

sapply() e lapply()
  • Eseguono una funzione agli elementi di un vettore o di un oggetto.
  • Restituiscono rispettivamente un vettore e una lista.

lapply(X, FUN)

  • X è un vettore o un oggetto.
  • FUN è la funzione da applicare.
  • sapply() e lapply() applicate a un vettore di stringhe.

# Crea un vettore di stringhe.
v <- c("Leonardo", "Da", "Vinci")
# Converte le stringhe in maiuscolo.
sapply(v, toupper)
 Leonardo         Da      Vinci
"LEONARDO"       "DA"    "VINCI"
lapply(v, toupper)
[[1]]
[1] "LEONARDO"
[[2]]
[1] "DA"
[[3]]
[1] "VINCI"

  • sapply() e lapply() con una funzione definita dall'utente.

# Esegue il calcolo di una funzione.
sapply(1:3, function(x) x^2 - 2*x + 1)
[1] 0 1 4
lapply(1:3, function(x) x^2 - 2*x + 1)
[[1]]
[1] 0
[[2]]
[1] 1
[[3]]
[1] 4

  • sapply() e lapply() applicate a un dataset.

# Esegue la funzione class() a tutte le variabili di un dataset.
sapply(iris, class)
Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species
  "numeric"    "numeric"    "numeric"    "numeric"     "factor"
lapply(iris, class)
$Sepal.Length
[1] "numeric"
$Sepal.Width
[1] "numeric"
$Petal.Length
[1] "numeric"
$Petal.Width
[1] "numeric"
$Species
[1] "factor"
# Esegue la funzione mean() a tutte le variabili di un dataset (le variabili devono essere numeriche).
lapply(cars, mean)
$speed
[1] 15.4
$dist
[1] 42.98
sapply(cars, mean)
speed  dist
15.40 42.98



© 2020 Carlo Vecchio
Torna ai contenuti