GNU R: lapply

Aus Wikibooks


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

siehe auch[Bearbeiten]