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:

Beispiel einer Apply()-Funktion in R
apply()-Funktionsbeispiel in R

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