2016-05-23 9 views
5

Mam problem ze zrozumieniem funkcji tapply, gdy argumentem jest FUN jest null.Aplikacja użytkownika R z funkcją pustą

documentation mówi:

Jeśli FUN jest NULL, Tapply zwraca wektor, który może być używany do wielu indeks ten sposób tablicę normalnie Tapply produkuje.

Na przykład, co robi poniższy przykład dokumentacji?

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

Nie rozumiem wyniki:

[1] 1 2 4 

Dzięki.

+1

Zobacz "interakcja (ind)", która generuje wszystkie kombinacje "poziomów" "poziomów"; w twoim przykładzie otrzymujesz ouput odpowiada dopasowaniu "X" na "poziomach (interakcja (ind)) [c (1, 2, 4)]" według argumentu "INDEX". Zobacz także "tapply (1: 5, list (c (1, 2, 2, 2, 1), c (" A "," A "," B "," B "," A "))) "widać to wyraźniej, jak" aplikuj ", grupując" X "przez" INDEX " –

+0

Wynik' ix <- tapply (X, INDEX) 'nie zależy od' X' - tylko w 'INDEX' - w szczególności, jeśli "INDEX" jest listą, to 'ix' jest równy' as.integer (do.call (interakcja, INDEX)) –

Odpowiedz

3

Jeśli prowadzisz tapply o określonej funkcji (NOT NULL), powiedzmy sum, jak w pomoc, zobaczysz, że wynik jest 2-wymiarowa tablica z NA w jednej komórce:

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

Oznacza to, że nie ma jednej kombinacji czynników, a mianowicie (1, B). Gdy FUN ma wartość NULL, zwraca wskaźniki wektorowe odpowiadające wszystkim obecnym kombinacjom współczynników. Aby sprawdzić to:

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

Jedną rzeczą wspomnieć, określona funkcja może powrócić NA na sam, jak w poniższym przykładzie zabawek:

> 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 

Tak w ogóle, NA, nie oznacza, że kombinacja czynników jest nieobecna.