apply(), lapply(), sapply(), tapply() Functie in R met voorbeelden

Deze tutorial is bedoeld om de functieverzameling apply() te introduceren. De functie apply() is de meest elementaire van alle verzamelingen. We zullen ook sapply(), lapply() en tapply() leren. De apply-collectie kan worden gezien als een vervanging voor de lus.

De collectie apply() is gebundeld met r essentieel pakket als je installeer R met Anaconda. De apply in R-functie kan worden gevoed met veel functies om redundante toepassing uit te voeren op een verzameling objecten (data frame, lijst, vector, enz.). Het doel van apply() is voornamelijk om expliciet gebruik van lusconstructies te vermijden. Ze kunnen worden gebruikt voor een invoerlijst, matrix of array en een functie toepassen. Elke functie kan worden doorgegeven aan apply().

apply() functie

van toepassing zijn() neemt een dataframe of matrix als invoer en geeft uitvoer in vector, lijst of array. Toepassen functie in R wordt voornamelijk gebruikt om expliciet gebruik van lusconstructies te vermijden. Het is de meest basale van alle verzamelingen die over een matrices kan worden gebruikt.

Deze functie heeft 3 argumenten nodig:

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>

Het eenvoudigste voorbeeld is het optellen van een matrice over alle kolommen. De code apply(m1, 2, sum) past de somfunctie toe op de matrix 5×6 en retourneert de som van elke kolom die toegankelijk is in de dataset.

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

Output:

Apply() Functievoorbeeld in R
apply() functievoorbeeld in R

Beste praktijk: sla de waarden op voordat u deze naar de console afdrukt.

lapply() functie

lapply() functie is handig voor het uitvoeren van bewerkingen op lijstobjecten en retourneert een lijstobject van dezelfde lengte als de oorspronkelijke set. lappy() retourneert een lijst van dezelfde lengte als het invoerlijstobject, waarvan elk element het resultaat is van het toepassen van FUN op het overeenkomstige element van de lijst. Lapply in R neemt een lijst, vector of dataframe als invoer en geeft uitvoer in de lijst.

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

l in lapply() staat voor lijst. Het verschil tussen lapply() en apply() ligt tussen de uitvoerretour. De uitvoer van lapply() is een lijst. lapply() kan worden gebruikt voor andere objecten zoals dataframes en lijsten.

lapply() functie heeft geen MARGIN nodig.

Een heel eenvoudig voorbeeld kan zijn om de tekenreekswaarde van een matrix te wijzigen in kleine letters met de functie tolower. We construeren een matrix met de naam van de bekende films. De naam is in hoofdletters.

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"

We kunnen unlist() gebruiken om de lijst naar een vector te converteren.

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

Output:

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

sapply()-functie

saply() functie neemt lijst, vector of dataframe als invoer en geeft uitvoer in vector of Matrix. Het is handig voor bewerkingen op lijstobjecten en retourneert een lijstobject van dezelfde lengte als de oorspronkelijke set. De Sapply-functie in R doet hetzelfde als de lapply()-functie, maar retourneert een vector.

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

We kunnen de minimumsnelheid en remafstanden van auto's meten uit de dataset van auto's.

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

We kunnen een door de gebruiker ingebouwde functie gebruiken in lapply() of sapply(). We maken een functie genaamd avg om het gemiddelde van het minimum en maximum van de vector te berekenen.

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

uitgang

## speed  dist
##  14.5  61.0

Sapply in R is efficiënter dan lapply() in de geretourneerde uitvoer, omdat sapply() waarden rechtstreeks in een vector opslaat. In het volgende voorbeeld zullen we zien dat dit niet altijd het geval is.

We kunnen het verschil tussen apply(), sapply() en `lapply() samenvatten in de volgende tabel:

Functie argumenten Objectief Invoer uitgang
dit toepassen toepassen(x, MARGE, FUN) Pas een functie toe op de rijen of kolommen, of op beide Gegevensframe of matrix vector, lijst, array
lap lapply(X, FUN) Pas een functie toe op alle elementen van de invoer Lijst, vector of dataframe lijst
sappig sapply(X, FUN) Pas een functie toe op alle elementen van de invoer Lijst, vector of dataframe vector of matrix

Plakvector

We kunnen lapply() of sapply() uitwisselbaar gebruiken om een ​​dataframe te segmenteren. We maken een functie, below_average(), die een vector van numerieke waarden neemt en een vector retourneert die alleen de waarden bevat die strikt boven het gemiddelde liggen. We vergelijken beide resultaten met de functie identiek().

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

tapply() functie

tapply() berekent een maat (gemiddelde, mediaan, min, max, enz.) of een functie voor elke factorvariabele in een vector. Het is een zeer nuttige functie waarmee u een subset van een vector kunt maken en vervolgens enkele functies op elk van de subsets kunt toepassen.

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

Een deel van de taak van een datawetenschapper of onderzoeker is het berekenen van samenvattingen van variabelen. Meet bijvoorbeeld het gemiddelde of groepeer gegevens op basis van een kenmerk. De meeste gegevens worden gegroepeerd op ID, stad, land, enzovoort. Samenvatten over groepen heen onthult interessantere patronen.

Laten we de iris-dataset gebruiken om te begrijpen hoe het werkt. Deze dataset is zeer beroemd in de wereld van machine learning. Het doel van deze dataset is om de klasse van elk van de drie bloemsoorten te voorspellen: Sepal, Versicolor, Virginica. De dataset verzamelt voor elke soort informatie over hun lengte en breedte.

Als voorafgaand werk kunnen we de mediaan van de lengte voor elke soort berekenen. Tapply in R is een snelle manier om deze berekening uit te voeren.

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

Output:

##     setosa versicolor  virginica 
##        3.4        2.8        3.0

Lees meer ...