Apply (), lapply (), sapply (), tapply () Funzione in R con esempi

Questo tutorial mira a introdurre la raccolta di funzioni apply (). La funzione apply () è la più basilare di tutta la raccolta. Impareremo anche sapply (), lapply () e tapply (). La raccolta di applicazioni può essere vista come un sostituto del ciclo.

La collezione apply () è inclusa nel pacchetto r essential se installi R con Anaconda. La funzione apply () può essere alimentata con molte funzioni per eseguire applicazioni ridondanti su una raccolta di oggetti (data frame, elenco, vettore, ecc.). Lo scopo di apply () è principalmente quello di evitare usi espliciti dei costrutti di ciclo. Possono essere utilizzati per un elenco di input, una matrice o un array e applicare una funzione. Qualsiasi funzione può essere passata ad apply ().

In questo tutorial imparerai

  • funzione apply ()
  • funzione lapply ()
  • funzione sapply ()
  • Vettore di fetta
  • funzione tapply ()

funzione apply ()

apply () accetta Data frame o matrice come input e fornisce l'output in vettore, elenco o array. La funzione apply () viene utilizzata principalmente per evitare usi espliciti dei costrutti di ciclo. È la più elementare di tutte le raccolte che può essere utilizzata su una matrice.

Questa funzione richiede 3 argomenti:

apply(X, MARGIN, FUN)Here:-x: an array or matrix-MARGIN: take a value or range between 1 and 2 to define where to apply the function:-MARGIN=1`: the manipulation is performed on rows-MARGIN=2`: the manipulation is performed on columns-MARGIN=c(1,2)` the manipulation is performed on rows and columns-FUN: tells which function to apply. Built functions like mean, median, sum, min, max and even user-defined functions can be applied>

L'esempio più semplice è sommare una matrice su tutte le colonne. Il codice apply (m1, 2, sum) applicherà la funzione sum alla matrice 5x6 e restituirà la somma di ogni colonna accessibile nel dataset.

m1 <- matrix(C<-(1:10),nrow=5, ncol=6)m1a_m1 <- apply(m1, 2, sum)a_m1

Produzione:

Procedura consigliata: memorizzare i valori prima di stamparli sulla console.

funzione lapply ()

La funzione lapply () è utile per eseguire operazioni sugli oggetti elenco e restituisce un oggetto elenco della stessa lunghezza dell'insieme originale. lappy () restituisce un elenco di lunghezza simile all'oggetto elenco di input, ogni elemento del quale è il risultato dell'applicazione di FUN all'elemento corrispondente di elenco. lapply () accetta list, vector o data frame come input e fornisce l'output in list.

lapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x

l in lapply () sta per list. La differenza tra lapply () e apply () sta tra il ritorno in uscita. L'output di lapply () è un elenco. lapply () può essere utilizzato per altri oggetti come frame di dati ed elenchi.

La funzione lapply () non necessita di MARGIN.

Un esempio molto semplice può essere quello di cambiare il valore di stringa di una matrice in minuscolo con la funzione tolower. Costruiamo una matrice con il nome dei famosi film. Il nome è in formato maiuscolo.

movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN")movies_lower <-lapply(movies, tolower)str(movies_lower)

Produzione:

## List of 4## $:chr"spyderman"## $:chr"batman"## $:chr"vertigo"## $:chr"chinatown"

Possiamo usare unlist () per convertire l'elenco in un vettore.

movies_lower <-unlist(lapply(movies,tolower))str(movies_lower)

Produzione:

## chr [1:4] "spyderman" "batman" "vertigo" "chinatown"

funzione sapply ()

La funzione sapply () accetta list, vector o data frame come input e fornisce l'output in vettore o matrice. È utile per le operazioni sugli oggetti elenco e restituisce un oggetto elenco della stessa lunghezza dell'insieme originale. La funzione sapply () fa lo stesso lavoro della funzione lapply () ma restituisce un vettore.

sapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x

Possiamo misurare la velocità minima e le distanze di arresto delle auto dal set di dati delle auto.

dt <- carslmn_cars <- lapply(dt, min)smn_cars <- sapply(dt, min)lmn_cars

Produzione:

## $speed## [1] 4## $dist## [1] 2
smn_cars

Produzione:

## speed dist## 4 2
lmxcars <- lapply(dt, max)smxcars <- sapply(dt, max)lmxcars

Produzione:

## $speed## [1] 25## $dist## [1] 120
smxcars

Produzione:

## speed dist## 25 120

Possiamo usare una funzione incorporata dall'utente in lapply () o sapply (). Creiamo una funzione chiamata avg per calcolare la media del minimo e del massimo del vettore.

avg <- function(x) {( min(x) + max(x) ) / 2}fcars <- sapply(dt, avg)fcars

Produzione

## speed dist## 14.5 61.0

La funzione sapply () è più efficiente di lapply () nell'output restituito perché sapply () memorizza i valori direttamente in un vettore. Nel prossimo esempio, vedremo che non è sempre così.

Possiamo riassumere la differenza tra apply (), sapply () e `lapply () nella seguente tabella:

Funzione

argomenti

Obbiettivo

Ingresso

Produzione

applicare

applica (x, MARGIN, FUN)

Applicare una funzione alle righe, alle colonne o a entrambe

Data frame o matrice

vettore, elenco, matrice

lapply

lapply (X, FUN)

Applica una funzione a tutti gli elementi dell'input

Elenco, vettore o frame di dati

elenco

sdolcinato

sdolcinato (X DIVERTIMENTO)

Applica una funzione a tutti gli elementi dell'input

Elenco, vettore o frame di dati

vettore o matrice

Vettore di fetta

Possiamo usare lapply () o sapply () intercambiabili per suddividere un frame di dati. Creiamo una funzione, below_average (), che prende un vettore di valori numerici e restituisce un vettore che contiene solo i valori che sono strettamente al di sopra della media. Confrontiamo entrambi i risultati con la funzione identica ().

below_ave <- function(x) {ave <- mean(x)return(x[x > ave])}dt_s<- sapply(dt, below_ave)dt_l<- lapply(dt, below_ave)identical(dt_s, dt_l)

Produzione:

## [1] TRUE

funzione tapply ()

tapply () calcola una misura (media, mediana, min, max, ecc…) o una funzione per ogni variabile fattore in un vettore. È una funzione molto utile che consente di creare un sottoinsieme di un vettore e quindi applicare alcune funzioni a ciascun sottoinsieme.

tapply(X, INDEX, FUN = NULL)Arguments:-X: An object, usually a vector-INDEX: A list containing factor-FUN: Function applied to each element of x

Parte del lavoro di uno scienziato o di un ricercatore di dati consiste nel calcolare riepiloghi di variabili. Ad esempio, misurare la media o i dati di gruppo in base a una caratteristica. La maggior parte dei dati sono raggruppati per ID, città, paesi e così via. Riassumendo nel gruppo rivela modelli più interessanti.

Per capire come funziona, usiamo il set di dati iris. Questo set di dati è molto famoso nel mondo dell'apprendimento automatico. Lo scopo di questo set di dati è prevedere la classe di ciascuna delle tre specie di fiori: Sepal, Versicolor, Virginica. Il set di dati raccoglie informazioni per ciascuna specie sulla loro lunghezza e larghezza.

Come lavoro precedente, possiamo calcolare la mediana della lunghezza per ciascuna specie. tapply () è un modo rapido per eseguire questo calcolo.

data(iris)tapply(iris$Sepal.Width, iris$Species, median)

Produzione:

## setosa versicolor virginica## 3.4 2.8 3.0

Articoli interessanti...