R apply(), lapply(), sapply(), tapply() med eksempler

Denne vejledning har til formål at introducere funktionssamlingen apply(). Apply()-funktionen er den mest grundlæggende af alle samlinger. Vi vil også lære sapply(), lapply() og taply(). Apply-samlingen kan ses som en erstatning for løkken.

Apply()-samlingen er bundtet med r afgørende pakke, hvis du installer R med Anaconda. Anvend i R-funktionen kan fodres med mange funktioner til at udføre redundant applikation på en samling af objekter (dataramme, liste, vektor osv.). Formålet med application() er primært at undgå eksplicit brug af loop-konstruktioner. De kan bruges til en inputliste, matrix eller array og anvende en funktion. Enhver funktion kan overføres til application().

anvende() funktion

ansøge() tager dataramme eller matrix som input og giver output i vektor, liste eller array. ansøge funktion i R bruges primært til at undgå eksplicit brug af loop-konstruktioner. Det er den mest basale af alle samlinger, der kan bruges over en matricer.

Denne funktion tager 3 argumenter:

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>

Det enkleste eksempel er at summere en matrice over alle kolonnerne. Koden apply(m1, 2, sum) vil anvende sumfunktionen på matrixen 5×6 og returnere summen af ​​hver kolonne, der er tilgængelig i datasættet.

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

Output:

Apply() funktionseksempel i R
anvende() funktionseksempel i R

Bedste praksis: Gem værdierne, før du udskriver dem til konsollen.

lapply() funktion

lapply() funktion er nyttig til at udføre operationer på listeobjekter og returnerer et listeobjekt med samme længde som det oprindelige sæt. lappy() returnerer en liste med samme længde som inputlisteobjektet, hvor hvert element er resultatet af at anvende FUN på det tilsvarende element i listen. Anvend i R tager liste, vektor eller dataramme som input og giver output i liste.

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

l i lapply() står for liste. Forskellen mellem lapply() og anvende() ligger mellem outputreturn. Outputtet af lapply() er en liste. lapply() kan bruges til andre objekter som datarammer og lister.

lapply()-funktionen behøver ikke MARGIN.

Et meget nemt eksempel kan være at ændre strengværdien af ​​en matrix til små bogstaver med tolower-funktion. Vi konstruerer en matrix med navnet på de berømte film. Navnet er i store bogstaver.

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

Output:

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

Vi kan bruge unlist() til at konvertere listen til en vektor.

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

Output:

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

sapply() funktion

ansøge() funktion tager liste, vektor eller dataramme som input og giver output i vektor eller matrix. Det er nyttigt til operationer på listeobjekter og returnerer et listeobjekt med samme længde som det oprindelige sæt. Sapply-funktionen i R udfører det samme job som lapply()-funktionen, men returnerer en vektor.

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

Vi kan måle minimumshastigheden og bremselængden for biler fra bilernes datasæt.

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

Output:

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

Output:

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

Output:

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

Output:

## speed  dist 
##    25   120

Vi kan bruge en brugerindbygget funktion i lapply() eller sapply(). Vi opretter en funktion ved navn avg for at beregne gennemsnittet af vektorens minimum og maksimum.

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

Produktion

## speed  dist
##  14.5  61.0

Sapply i R er mere effektivt end lapply() i det returnerede output, fordi sapply() gemmer værdier direkte i en vektor. I det næste eksempel vil vi se, at dette ikke altid er tilfældet.

Vi kan opsummere forskellen mellem application(), sapply() og `lapply() i følgende tabel:

Funktion argumenter Objektiv Input Produktion
ansøge anvende (x, MARGIN, SJOV) Anvend en funktion på rækkerne eller kolonnerne eller begge dele Dataramme eller matrix vektor, liste, array
lapply lapply(X, SJOV) Anvend en funktion på alle elementerne i inputtet Liste, vektor eller dataramme liste
ansøge sapply (X, SJOV) Anvend en funktion på alle elementerne i inputtet Liste, vektor eller dataramme vektor eller matrix

Skive vektor

Vi kan bruge lapply() eller sapply() udskiftelige til at opdele en dataramme. Vi opretter en funktion, below_average(), der tager en vektor med numeriske værdier og returnerer en vektor, der kun indeholder de værdier, der er strengt over gennemsnittet. Vi sammenligner begge resultater med identisk()-funktionen.

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)

Output:

## [1] TRUE

taply() funktion

tryk () beregner et mål (middelværdi, median, min, max osv..) eller en funktion for hver faktorvariabel i en vektor. Det er en meget nyttig funktion, der lader dig oprette en delmængde af en vektor og derefter anvende nogle funktioner til hver af undermængden.

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

En del af en dataforskers eller -forskers job er at beregne opsummeringer af variabler. Mål for eksempel gennemsnittet eller gruppedata baseret på en karakteristik. De fleste data er grupperet efter ID, by, lande og så videre. Opsummering over gruppe afslører mere interessante mønstre.

For at forstå, hvordan det virker, lad os bruge iris-datasættet. Dette datasæt er meget berømt i verden af ​​maskinlæring. Formålet med dette datasæt er at forudsige klassen for hver af de tre blomsterarter: bægerblad, Versicolor, Virginica. Datasættet indsamler information for hver art om deres længde og bredde.

Som et tidligere arbejde kan vi beregne medianen af ​​længden for hver art. Tryk på R er en hurtig måde at udføre denne beregning på.

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

Output:

##     setosa versicolor  virginica 
##        3.4        2.8        3.0

Opsummer dette indlæg med: