GNU R: apply
Die Anweisung apply (X, MARGIN, FUN)
wendet eine Funktion FUN auf die Elemente eines arrays
/ data.frames
an.
Dabei kann die Funktion auf Zeilen (MARGIN=1
), Spalten (MARGIN=2
) oder Zeilen und Spalten (MARGIN=c(1,2)
) angewandt werden. Für zweidimensionale Arrays macht nur die Unterscheidung zwischen zeilen- und spaltenweiser Anwendung Sinn. Eine Funktion wie Mittelwert (MEAN) kann sowohl auf Zeilen, Spalten, wie auch auf Zellen angewendet werden.
Dies gilt nicht immer. Wenn eine Funktion nur sinnvoll auf das ganze Array angewendet werden kann, führt hier der Parameter MARGIN=2
(und nicht nur MARGIN=c(1,2)
) zum Anwendung separat auf jede Zelle:
> bspmatrix<-matrix(1:30,byrow=T,ncol=10) # neue Beispielmatrix > multipliziere <- function(x) {10*x} # neue Beispielfunktion > bspmatrix [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 1 2 3 4 5 6 7 8 9 10 [2,] 11 12 13 14 15 16 17 18 19 20 [3,] 21 22 23 24 25 26 27 28 29 30
apply(bspmatrix,MARGIN=2,FUN=multipliziere) [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 10 20 30 40 50 60 70 80 90 100 [2,] 110 120 130 140 150 160 170 180 190 200 [3,] 210 220 230 240 250 260 270 280 290 300
apply
kann aber auch mittels einer Dummyfunktion benutzt werden um in einem zweidimensionalen array
Zeilen und Spalten zu vertauschen:
> bsp4 Name Geschlecht Lieblingsfarbe Einkommen 1 Hans maennlich gruen 1233 2 Caro weiblich blau 800 3 Lars intersexuell gelb 2400 4 Ines weiblich schwarz 4000 5 Samira weiblich gelb 899 6 Peter maennlich gruen 1100 7 Sarah weiblich blau 1900 > as.data.frame(apply(bsp4,MARGIN=1,FUN=function(x) {x})) 1 2 3 4 5 6 7 Name Hans Caro Lars Ines Samira Peter Sarah Geschlecht maennlich weiblich intersexuell weiblich weiblich maennlich weiblich Lieblingsfarbe gruen blau gelb schwarz gelb gruen blau Einkommen 1233 800 2400 4000 899 1100 1900
Da apply
eine Typkonversion in die Klasse matrix
vornimmt muss bei Bedarf wie im obigen Beispiel zurück in die Klasse data.frame
konvertiert werden.
Parameter an FUN übergeben
BearbeitenUm Parameter an die FUN-Funktion zu übergeben, wird folgende Syntax verwendet:
apply(data,1,FUN,parameter=1)
Hierbei ist zu beachten, dass als erster Wert an die Funktion immer das x
übergeben wird, und erst anschließend die angegebenen Parameter! Funktionen müssen entsprechend programmiert sein, dass sie x
als erstes Argument übernehmen.