Zum Inhalt springen

GNU R: apply

Aus Wikibooks


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

[Bearbeiten]

Um 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.

siehe auch

[Bearbeiten]