GNU R: lapply
lapply(x,func)
ermöglicht die Anwendung von Funktionen func
auf jedes Objekt einer Liste x
. Damit ist es eine zumeist schnellere und elegantere Alternative als die Programmierung solcher Operationen mit Schleifen (z.B. durch for
).
Handhabung
[Bearbeiten]Um für eine Reihe von Objekten a1, a2, a3
dieselbe Funktion func
durchzuführen, können diese via lapply ("L" für list) übergeben werden.
Dabei ist es wichtig, zu beachten, dass lapply keine Verbindung von Vektoren (mit c(...)
), sondern eine Liste vorausssetzt.
Das folgende Beispiel berechnet für die 3 Vektoren die Mittelwerte:
> a1 <- 1:10 #Belegung mit Zahlenreihe > a2 <- 2:30 > a3 <- 3:40 > lapply(list(a1,a2,a3), mean) [ [1] ] [1] 5.5 [ [2] ] [1] 16 [ [3] ] [1] 21.5
Wie schon an der Indexierung zu erkennen ist, gibt lapply ebenfalls eine Liste zurück:
> class(lapply(list(a1,a2,a3), mean)) [1] "list"
Mit sapply
("S" für simple) existiert eine bequeme Abwandlung von lapply, die den Output -so möglich - in einen Vektor transformiert:
> sapply(list(a1,a2,a3),mean) [1] 5.5 16.0 21.5 > class(sapply(list(a1,a2,a3),mean)) [1] "numeric"
lapply
und sapply
sind v.a. dann sehr nützlich wenn Funktionen mehrere Objekte bearbeiten sollen, die standardmässig nur ein Objekt als Parameter akzeptieren.
Auch zum gleichzeitigen Zugriff auf mehrere Variablen eines Datensatzes bringt lapply
erhebliche Vereinfachung:
> data(bsp4) > lapply(bsp4[,c("Geschlecht","Lieblingsfarbe")],summary) $Geschlecht intersexuell maennlich weiblich 1 2 4 $Lieblingsfarbe blau gelb gruen schwarz 2 2 2 1