apply(), lapply(), sapply(), tapply() Funktion in R mit Beispielen
Ziel dieses Tutorials ist es, die Funktionssammlung apply() vorzustellen. Die Funktion apply() ist die grundlegendste aller Sammlungen. Wir werden auch sapply(), lapply() und tapply() lernen. Die Apply-Sammlung kann als Ersatz für die Schleife betrachtet werden.
Die apply()-Sammlung ist im Lieferumfang enthalten r wesentlich Paket, wenn Sie Installieren Sie R mit Anaconda. Die Funktion „apply“ in R kann mit vielen Funktionen gespeist werden, um redundante Anwendungen auf eine Sammlung von Objekten (Datenrahmen, Liste, Vektor usw.) durchzuführen. Der Zweck von apply() besteht hauptsächlich darin, die explizite Verwendung von Schleifenkonstrukten zu vermeiden. Sie können für eine Eingabeliste, Matrix oder ein Array verwendet werden und eine Funktion anwenden. Jede Funktion kann an apply() übergeben werden.
apply()-Funktion
anwenden() Nimmt einen Datenrahmen oder eine Matrix als Eingabe und gibt die Ausgabe als Vektor, Liste oder Array aus. Anwenden Funktion in R wird hauptsächlich verwendet, um die explizite Verwendung von Schleifenkonstrukten zu vermeiden. Es ist die grundlegendste aller Sammlungen, die über Matrizen verwendet werden können.
Diese Funktion benötigt 3 Argumente:
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>
Das einfachste Beispiel ist die Summierung einer Matrize über alle Spalten. Der Code apply(m1, 2, sum) wendet die Summenfunktion auf die Matrix 5×6 an und gibt die Summe jeder im Datensatz zugänglichen Spalte zurück.
m1 <- matrix(C<-(1:10),nrow=5, ncol=6) m1 a_m1 <- apply(m1, 2, sum) a_m1
Ausgang:
Best Practice: Speichern Sie die Werte, bevor Sie sie auf der Konsole ausgeben.
lapply()-Funktion
lapply() Die Funktion ist nützlich, um Operationen an Listenobjekten durchzuführen und gibt ein Listenobjekt mit der gleichen Länge wie der ursprüngliche Satz zurück. lappy() gibt eine Liste mit der gleichen Länge wie das eingegebene Listenobjekt zurück, wobei jedes Element das Ergebnis der Anwendung von FUN auf das entsprechende Listenelement ist. Lapply in R verwendet eine Liste, einen Vektor oder einen Datenrahmen als Eingabe und gibt eine Liste als Ausgabe aus.
lapply(X, FUN) Arguments: -X: A vector or an object -FUN: Function applied to each element of x
l in lapply() steht für Liste. Der Unterschied zwischen lapply() und apply() liegt in der Ausgaberückgabe. Die Ausgabe von lapply() ist eine Liste. lapply() kann für andere Objekte wie Datenrahmen und Listen verwendet werden.
Die Funktion lapply() benötigt keinen MARGIN.
Ein sehr einfaches Beispiel kann darin bestehen, den Zeichenfolgenwert einer Matrix mit der Funktion tolower in Kleinbuchstaben zu ändern. Wir erstellen eine Matrix mit den Namen der berühmten Filme. Der Name wird in Großbuchstaben geschrieben.
movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN") movies_lower <-lapply(movies, tolower) str(movies_lower)
Ausgang:
## List of 4 ## $:chr"spyderman" ## $:chr"batman" ## $:chr"vertigo" ## $:chr"chinatown"
Wir können unlist() verwenden, um die Liste in einen Vektor umzuwandeln.
movies_lower <-unlist(lapply(movies,tolower)) str(movies_lower)
Ausgang:
## chr [1:4] "spyderman" "batman" "vertigo" "chinatown"
sapply()-Funktion
sapply() Die Funktion verwendet eine Liste, einen Vektor oder einen Datenrahmen als Eingabe und gibt die Ausgabe als Vektor oder aus Matrix. Es ist nützlich für Operationen an Listenobjekten und gibt ein Listenobjekt mit derselben Länge wie der ursprüngliche Satz zurück. Die Sapply-Funktion in R erledigt dieselbe Aufgabe wie die Funktion lapply(), gibt aber einen Vektor zurück.
sapply(X, FUN) Arguments: -X: A vector or an object -FUN: Function applied to each element of x
Aus dem Fahrzeugdatensatz können wir die Mindestgeschwindigkeit und den Bremsweg von Fahrzeugen messen.
dt <- cars lmn_cars <- lapply(dt, min) smn_cars <- sapply(dt, min) lmn_cars
Ausgang:
## $speed ## [1] 4 ## $dist ## [1] 2
smn_cars
Ausgang:
## speed dist ## 4 2
lmxcars <- lapply(dt, max) smxcars <- sapply(dt, max) lmxcars
Ausgang:
## $speed ## [1] 25 ## $dist ## [1] 120
smxcars
Ausgang:
## speed dist ## 25 120
Wir können eine benutzerdefinierte integrierte Funktion in lapply() oder sapply() verwenden. Wir erstellen eine Funktion namens avg, um den Durchschnitt des Minimums und Maximums des Vektors zu berechnen.
avg <- function(x) { ( min(x) + max(x) ) / 2} fcars <- sapply(dt, avg) fcars
Ausgang
## speed dist ## 14.5 61.0
Sapply in R ist in der zurückgegebenen Ausgabe effizienter als lapply(), da sapply() Werte direkt in einem Vektor speichert. Im nächsten Beispiel werden wir sehen, dass dies nicht immer der Fall ist.
Wir können den Unterschied zwischen apply(), sapply() und `lapply() in der folgenden Tabelle zusammenfassen:
Funktion | Argumente | Ziel | Eingang | Ausgang |
---|---|---|---|---|
sich bewerben | apply(x, MARGIN, FUN) | Wenden Sie eine Funktion auf die Zeilen, Spalten oder beides an | Datenrahmen oder Matrix | Vektor, Liste, Array |
lappig | lapply(X, FUN) | Wenden Sie eine Funktion auf alle Elemente der Eingabe an | Liste, Vektor oder Datenrahmen | Liste |
sapple | sapply(X, FUN) | Wenden Sie eine Funktion auf alle Elemente der Eingabe an | Liste, Vektor oder Datenrahmen | Vektor oder Matrix |
Slice-Vektor
Wir können lapply() oder sapply() austauschbar verwenden, um einen Datenrahmen zu segmentieren. Wir erstellen eine Funktion, Below_average(), die einen Vektor numerischer Werte nimmt und einen Vektor zurückgibt, der nur die Werte enthält, die deutlich über dem Durchschnitt liegen. Wir vergleichen beide Ergebnisse mit der Funktion identisch().
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)
Ausgang:
## [1] TRUE
tapply()-Funktion
tapply() berechnet ein Maß (Mittelwert, Median, Minimum, Maximum usw.) oder eine Funktion für jede Faktorvariable in einem Vektor. Es handelt sich um eine sehr nützliche Funktion, mit der Sie eine Teilmenge eines Vektors erstellen und dann einige Funktionen auf jede Teilmenge anwenden können.
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
Ein Teil der Arbeit eines Datenwissenschaftlers oder Forschers besteht darin, Zusammenfassungen von Variablen zu berechnen. Messen Sie beispielsweise den Durchschnitt oder gruppieren Sie Daten basierend auf einem Merkmal. Die meisten Daten sind nach ID, Stadt, Ländern usw. gruppiert. Das Zusammenfassen über Gruppen hinweg offenbart interessantere Muster.
Um zu verstehen, wie es funktioniert, verwenden wir den Iris-Datensatz. Dieser Datensatz ist in der Welt des maschinellen Lernens sehr bekannt. Der Zweck dieses Datensatzes besteht darin, die Klasse jeder der drei Blumenarten vorherzusagen: Sepal, Versicolor, Virginica. Der Datensatz sammelt für jede Art Informationen über ihre Länge und Breite.
Als Vorarbeit können wir den Median der Länge für jede Art berechnen. Tapply in R ist eine schnelle Möglichkeit, diese Berechnung durchzuführen.
data(iris) tapply(iris$Sepal.Width, iris$Species, median)
Ausgang:
## setosa versicolor virginica ## 3.4 2.8 3.0