Applicera (), lapply (), sapply (), tapply () Funktion i R med exempel

Innehållsförteckning:

Anonim

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