Denna handledning syftar till att introducera funktionssamlingen Apply (). Funktionen Apply () är den mest grundläggande i all samling. Vi lär oss också sapply (), lapply () och tapply (). Tillämpningssamlingen kan ses som en ersättning för slingan.
Apply () -samlingen levereras med ett väsentligt paket om du installerar R med Anaconda. Funktionen Apply () kan matas med många funktioner för att utföra överflödig applikation på en samling objekt (dataram, lista, vektor etc.). Syftet med applicera () är främst att undvika explicita användningar av loopkonstruktioner. De kan användas för en ingångslista, matris eller matris och tillämpa en funktion. Vilken funktion som helst kan överföras till tillämpning ().
I den här handledningen lär du dig
- applicera () funktion
- lapply () funktion
- sapply () -funktionen
- Skiva vektor
- tapply () funktion
applicera () funktion
applicera () tar dataram eller matris som ingång och ger utdata i vektor, lista eller matris. Apply () Funktionen används främst för att undvika explicita användningar av loopkonstruktioner. Det är den mest grundläggande av alla samlingar som kan användas över en matris.
Denna funktion tar 3 argument:
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 enklaste exemplet är att summera en matris över alla kolumner. Koden applicera (m1, 2, sum) tillämpar sumfunktionen på matrisen 5x6 och returnerar summan av varje kolumn som är tillgänglig i datasetet.
m1 <- matrix(C<-(1:10),nrow=5, ncol=6)m1a_m1 <- apply(m1, 2, sum)a_m1
Produktion:
Bästa praxis: Spara värdena innan du skriver ut dem på konsolen.
lapply () funktion
lapply () -funktionen är användbar för att utföra operationer på listobjekt och returnerar ett listobjekt med samma längd som originaluppsättningen. lappy () returnerar en lista med samma längd som ingångslistaobjekt, varav varje element är resultatet av att FUN tillämpas på motsvarande element i listan. lapply () tar lista, vektorn eller dataramen som inmatning och ger utdata i listan.
lapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x
Jag i lapply () står för listan. Skillnaden mellan lapply () och Apply () ligger mellan output return. Produktionen från lapply () är en lista. lapply () kan användas för andra objekt som dataramar och listor.
lapply () -funktionen behöver inte MARGIN.
Ett mycket enkelt exempel kan vara att ändra strängvärdet för en matris till gemener med lägre funktion. Vi konstruerar en matris med namnet på de berömda filmerna. Namnet är i versaler.
movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN")movies_lower <-lapply(movies, tolower)str(movies_lower)
Produktion:
## List of 4## $:chr"spyderman"## $:chr"batman"## $:chr"vertigo"## $:chr"chinatown"
Vi kan använda unlist () för att konvertera listan till en vektor.
movies_lower <-unlist(lapply(movies,tolower))str(movies_lower)
Produktion:
## chr [1:4] "spyderman" "batman" "vertigo" "chinatown"
sapply () -funktionen
sapply () -funktionen tar lista, vektor eller dataram som inmatning och ger utdata i vektor eller matris. Det är användbart för operationer på listobjekt och returnerar ett listobjekt med samma längd som originaluppsättningen. sapply () -funktionen gör samma jobb som lapply () -funktionen men returnerar en vektor.
sapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x
Vi kan mäta minsta hastighet och stoppavstånd för bilar från bilens dataset.
dt <- carslmn_cars <- lapply(dt, min)smn_cars <- sapply(dt, min)lmn_cars
Produktion:
## $speed## [1] 4## $dist## [1] 2
smn_cars
Produktion:
## speed dist## 4 2
lmxcars <- lapply(dt, max)smxcars <- sapply(dt, max)lmxcars
Produktion:
## $speed## [1] 25## $dist## [1] 120
smxcars
Produktion:
## speed dist## 25 120
Vi kan använda en användarinbyggd funktion i lapply () eller sapply (). Vi skapar en funktion med namnet avg för att beräkna medelvärdet av minsta och maximala för vektorn.
avg <- function(x) {( min(x) + max(x) ) / 2}fcars <- sapply(dt, avg)fcars
Produktion
## speed dist## 14.5 61.0
sapply () -funktionen är effektivare än lapply () i den returnerade utdata eftersom sapply () lagrar värden direkt i en vektor. I nästa exempel ser vi att detta inte alltid är fallet.
Vi kan sammanfatta skillnaden mellan Apply (), Sapply () och `Lapply () i följande tabell:
Fungera |
Argument |
Mål |
Inmatning |
Produktion |
---|---|---|---|---|
tillämpa |
tillämpa (x, MARGIN, FUN) |
Tillämpa en funktion på raderna eller kolumnerna eller båda |
Dataram eller matris |
vektor, lista, matris |
lapply |
lapply (X, FUN) |
Tillämpa en funktion på alla element i ingången |
Lista, vektor eller dataram |
lista |
sapply |
sappy (X FUN) |
Tillämpa en funktion på alla element i ingången |
Lista, vektor eller dataram |
vektor eller matris |
Skiva vektor
Vi kan använda utbytbara lapply () eller sapply () för att skära en dataram. Vi skapar en funktion, under_genomsnitt (), som tar en vektor med numeriska värden och returnerar en vektor som endast innehåller värdena som ligger strikt över genomsnittet. Vi jämför båda resultaten med samma () funktion.
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)
Produktion:
## [1] TRUE
tapply () funktion
tapply () beräknar ett mått (medelvärde, median, min, max, etc ...) eller en funktion för varje faktorvariabel i en vektor. Det är en mycket användbar funktion som låter dig skapa en delmängd av en vektor och sedan tillämpa vissa funktioner på var och en av delmängderna.
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 av jobbet för en datavetare eller forskare är att beräkna sammanfattningar av variabler. Mät till exempel medel- eller gruppdata baserat på en egenskap. De flesta uppgifterna är grupperade efter ID, stad, länder och så vidare. Sammanfattning över grupp avslöjar mer intressanta mönster.
För att förstå hur det fungerar, låt oss använda irisdatauppsättningen. Denna dataset är mycket känd i världen av maskininlärning. Syftet med denna dataset är att förutsäga klassen för var och en av de tre blomarterna: Sepal, Versicolor, Virginica. Datauppsättningen samlar information för varje art om deras längd och bredd.
Som ett tidigare arbete kan vi beräkna längden för varje art. tapply () är ett snabbt sätt att utföra denna beräkning.
data(iris)tapply(iris$Sepal.Width, iris$Species, median)
Produktion:
## setosa versicolor virginica## 3.4 2.8 3.0