apply (), lapply (), sapply (), tapply () Funció en R amb exemples

Aquest tutorial té com a objectiu introduir la col·lecció de funcions apply (). La funció apply () és la més bàsica de tota la col·lecció. També aprendrem sapply (), lapply () i tapply (). La col·lecció Aplicar es pot veure com un substitut del bucle.

La col·lecció apply () s’inclou amb r essencial paquet si vostè instal·leu R amb Anaconda . La funció Aplicar a R es pot alimentar amb moltes funcions per realitzar aplicacions redundants en una col·lecció d'objectes (marc de dades, llista, vector, etc.). El propòsit de apply () és principalment evitar usos explícits de construccions de bucle. Es poden utilitzar per a una llista d'entrada, matriu o matriu i aplicar una funció. Qualsevol funció es pot passar a apply ().

En aquest tutorial, aprendreu

funció apply ()

apply () pren el marc de dades o la matriu com a entrada i dóna sortida en vector, llista o matriu. La funció Apply a R s'utilitza principalment per evitar usos explícits de construccions de bucle. És la més bàsica de totes les col·leccions que es poden utilitzar sobre una matriu.

Aquesta funció té 3 arguments:

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'exemple més senzill és sumar una matriu sobre totes les columnes. El codi d'aplicació (m1, 2, suma) aplicarà la funció suma a la matriu 5x6 i retornarà la suma de cada columna accessible al conjunt de dades.

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

Sortida:

exemple de funció apply () a R

Pràctica recomanada: emmagatzemeu els valors abans d'imprimir-los a la consola.

funció lapply ()

lapply () La funció és útil per realitzar operacions en objectes de llista i retorna un objecte de llista de la mateixa longitud del conjunt original. lappy () retorna una llista de la longitud similar a l'objecte de llista d'entrada, cada element del qual és el resultat d'aplicar FUN a l'element de llista corresponent. Lapply a R pren la llista, el vector o el marc de dades com a entrada i dóna sortida a la llista.

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

l a lapply () significa llista. La diferència entre lapply () i apply () es troba entre el retorn de sortida. La sortida de lapply () és una llista. lapply () es pot utilitzar per a altres objectes, com ara marcs de dades i llistes.

la funció lapply () no necessita MARGIN.

Un exemple molt senzill pot ser canviar el valor de la cadena d'una matriu a minúscules amb la funció tolower. Construïm una matriu amb el nom de les famoses pel·lícules. El nom està en format majúscula.

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

Sortida:

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

Podem utilitzar unlist () per convertir la llista en un vector.

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

Sortida:

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

funció sapply ()

sapply () La funció pren la llista, el vector o el marc de dades com a entrada i dóna sortida en vector o matriu. És útil per a operacions sobre objectes de llista i retorna un objecte de llista de la mateixa longitud del conjunt original. La funció Sapply a R fa el mateix treball que la funció lapply () però retorna un vector.

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

Podem mesurar la velocitat mínima i les distàncies d’aturada dels vehicles des del conjunt de dades de vehicles.

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

Sortida:

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

Sortida:

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

Sortida:

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

Sortida:

## speed dist ## 25 120

Podem utilitzar una funció integrada per l’usuari a lapply () o sapply (). Creem una funció anomenada avg per calcular la mitjana del mínim i el màxim del vector.

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

Sortida

## speed dist ## 14.5 61.0

Sapply a R és més eficient que lapply () a la sortida retornada perquè sapply () emmagatzema directament els valors en un vector. En el següent exemple, veurem que no sempre és així.

Podem resumir la diferència entre apply (), sapply () i `lapply () a la taula següent:

FuncióArgumentsObjectiuEntradaSortida
aplicaraplicar (x, MARGIN, FUN)Apliqueu una funció a les files o columnes o a totes duesMarc o matriu de dadesvector, llista, matriu
lapplylapply (X, FUN)Apliqueu una funció a tots els elements de l'entradaLlista, vector o marc de dadesllista
sapplysapply (X, FUN)Apliqueu una funció a tots els elements de l'entradaLlista, vector o marc de dadesvector o matriu

Làmina de vector

Podem utilitzar lapply () o sapply () intercanviables per tallar un marc de dades. Creem una funció, below_average (), que pren un vector de valors numèrics i retorna un vector que només conté els valors estrictament superiors a la mitjana. Comparem els dos resultats amb la funció idèntica ().

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

Sortida:

## [1] TRUE

funció tapply ()

tapply () calcula una mesura (mitjana, mitjana, mínima, màxima, etc.) o una funció per a cada variable de factor en un vector. És una funció molt útil que us permet crear un subconjunt d'un vector i aplicar algunes funcions a cadascun dels subconjunts.

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

Una part de la feina d’un científic o investigadors de dades és calcular resums de variables. Per exemple, mesureu la mitjana o les dades de grup en funció d'una característica. La majoria de les dades s’agrupen per identificació, ciutat, països, etc. Resumir en grup revela patrons més interessants.

Per entendre com funciona, fem servir el conjunt de dades d’iris. Aquest conjunt de dades és molt famós al món de l’aprenentatge automàtic. L’objectiu d’aquest conjunt de dades és predir la classe de cadascuna de les tres espècies de flors: Sepal, Versicolor, Virginica. El conjunt de dades recopila informació de cada espècie sobre la seva longitud i amplada.

Com a treball previ, podem calcular la mitjana de la longitud de cada espècie. Tapply in R és una forma ràpida de realitzar aquest càlcul.

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

Sortida:

## setosa versicolor virginica ## 3.4 2.8 3.0