Deze tutorial is bedoeld om de functieverzameling apply () te introduceren. De functie apply () is de meest elementaire verzameling. We zullen ook sapply (), lapply () en tapply () leren. De Apply-collectie kan worden gezien als een substituut voor de lus.
De apply () -collectie wordt gebundeld met het r essential- pakket als je R met Anaconda installeert. De functie apply () kan worden gevoed met vele functies om een redundante toepassing uit te voeren op een verzameling objecten (dataframe, lijst, vector, enz.). Het doel van apply () is primair om expliciet gebruik van lusconstructies te vermijden. Ze kunnen worden gebruikt voor een invoerlijst, matrix of array en passen een functie toe. Elke functie kan worden doorgegeven aan apply ().
In deze tutorial leer je
- apply () functie
- lapply () functie
- sapply () functie
- Snijd de vector
- tapply () functie
apply () functie
apply () neemt dataframe of matrix als invoer en geeft uitvoer in vector, lijst of array. apply () Functie wordt voornamelijk gebruikt om expliciet gebruik van lusconstructies te vermijden. Het is de meest basale van alle collecties die over een matrijs 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 om een matrijs op te tellen over alle kolommen. De code apply (m1, 2, sum) past de somfunctie toe op de matrix 5x6 en retourneert de som van elke kolom die toegankelijk is in de dataset.
m1 <- matrix(C<-(1:10),nrow=5, ncol=6)m1a_m1 <- apply(m1, 2, sum)a_m1
Uitgang:
Aanbevolen procedure: Sla de waarden op voordat u deze naar de console afdrukt.
lapply () functie
De functie lapply () is handig voor het uitvoeren van bewerkingen op lijstobjecten en retourneert een lijstobject met dezelfde lengte als de oorspronkelijke set. lappy () retourneert een lijst met dezelfde lengte als het invoerlijstobject, waarvan elk element het resultaat is van het toepassen van FUN op het corresponderende element van de lijst. lapply () neemt lijst, vector of dataframe als invoer en geeft uitvoer in 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)
Uitgang:
## List of 4## $:chr"spyderman"## $:chr"batman"## $:chr"vertigo"## $:chr"chinatown"
We kunnen unlist () gebruiken om de lijst om te zetten in een vector.
movies_lower <-unlist(lapply(movies,tolower))str(movies_lower)
Uitgang:
## chr [1:4] "spyderman" "batman" "vertigo" "chinatown"
sapply () functie
sapply () 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 met dezelfde lengte als de oorspronkelijke set. sapply () functie doet hetzelfde als lapply () functie maar retourneert een vector.
sapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x
Uit de autodataset kunnen we de minimumsnelheid en remafstanden van auto's meten.
dt <- carslmn_cars <- lapply(dt, min)smn_cars <- sapply(dt, min)lmn_cars
Uitgang:
## $speed## [1] 4## $dist## [1] 2
smn_cars
Uitgang:
## speed dist## 4 2
lmxcars <- lapply(dt, max)smxcars <- sapply(dt, max)lmxcars
Uitgang:
## $speed## [1] 25## $dist## [1] 120
smxcars
Uitgang:
## speed dist## 25 120
We kunnen een door de gebruiker ingebouwde functie gebruiken in lapply () of sapply (). We maken een functie met de naam 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
Uitvoer
## speed dist## 14.5 61.0
sapply () functie is efficiënter dan lapply () in de geretourneerde uitvoer omdat sapply () waarden direct 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 |
Uitvoer |
---|---|---|---|---|
van toepassing zijn |
toepassen (x, MARGIN, FUN) |
Pas een functie toe op de rijen of kolommen of beide |
Dataframe of matrix |
vector, lijst, matrix |
lapply |
lapply (X, FUN) |
Pas een functie toe op alle elementen van de invoer |
Lijst, vector of dataframe |
lijst |
sappig |
sappig (X FUN) |
Pas een functie toe op alle elementen van de invoer |
Lijst, vector of dataframe |
vector of matrix |
Snijd de vector
We kunnen lapply () of sapply () uitwisselbaar gebruiken om een dataframe te snijden. 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 identieke () functie.
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)
Uitgang:
## [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 elke subset 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 de gemiddelde of groepsgegevens op basis van een kenmerk. De meeste gegevens zijn gegroepeerd op ID, stad, land, enzovoort. Samenvatten over groep onthult meer interessante patronen.
Laten we de iris-gegevensset gebruiken om te begrijpen hoe het werkt. Deze dataset is erg 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 () is een snelle manier om deze berekening uit te voeren.
data(iris)tapply(iris$Sepal.Width, iris$Species, median)
Uitgang:
## setosa versicolor virginica## 3.4 2.8 3.0