2016-05-23 3 views
5

Ich habe Probleme zu verstehen, was tapply Funktion tut, wenn das FUN Argument ist null.R's Tapply mit Null-Funktion

Die documentation sagt:

Wenn FUN NULL ist, Tapply einen Vektor zurückgibt, der verwendet werden kann, die Mehrwege-Array Subskript Tapply normalerweise produziert.

Zum Beispiel, was macht das folgende Beispiel der Dokumentation?

ind <- list(c(1, 2, 2), c("A", "A", "B")) 
tapply(1:3, ind) #-> the split vector 

Ich verstehe nicht, die Ergebnisse:

[1] 1 2 4 

Dank.

+1

Siehe 'interaction (ind)', die alle Kombinationen von "Faktor" "Ebenen" erzeugt; In Ihrem Beispiel entspricht die Ausgabe, die Sie erhalten, "X", die in "Ebenen (Interaktion (ind))" [c (1, 2, 4)] 'nach" INDEX "-Argument übereinstimmt. Siehe auch "tapply" (1: 5, Liste (c (1, 2, 2, 2, 1), c ("A", "A", "B", "B", "A"))) 'Das kann klarer gesehen werden, wenn man" X "mit" INDEX "gruppiert –

+0

Das Ergebnis von' ix <- tapply (X, INDEX) 'hängt nicht von' X' ab - nur von 'INDEX' - und insbesondere, wenn "INDEX" eine Liste ist, dann ist "ix" gleich "as.integer" (do.call (Interaktion, INDEX)) " –

Antwort

3

Wenn Sie tapply mit einer bestimmten Funktion (nicht NULL) laufen, sagen sum, wie in Hilfe, werden Sie sehen, dass das Ergebnis ist ein 2-dimensionales Array mit NA in einer Zelle:

res <- tapply(1:3, ind, sum) 
res 
    A B 
1 1 NA 
2 2 3 

Es bedeutet, dass eine Kombination von Faktoren, nämlich (1, B), abwesend ist. Wenn FUN NULL ist, gibt es Vektorindizes zurück, die allen vorhandenen Faktorkombinationen entsprechen. Um dies zu überprüfen:

> which(!is.na(res)) 
[1] 1 2 4 

Eine Sache zu erwähnen, kann die spezifizierte Funktion zurückkehren NA selbst, wie im folgende Spielzeug Beispiel:

> f <- function(x){ 
     if(x[[1]] == 1) return(NA) 
     return(sum(x)) 
    } 
> tapply(1:3, ind, f) 
    A B 
1 NA NA 
2 2 3 

So im Allgemeinen NA bedeutet nicht, dass ein Faktorkombination fehlt.