2016-05-23 14 views
5

Non riesco a capire cosa fa la funzione tapply quando l'argomento FUN è null.Pulsante T con funzione nulla

Il documentation dice:

Se il divertimento è NULL, Tapply restituisce un vettore che può essere utilizzato per pedice matrice più vie Tapply produce normalmente.

Ad esempio, cosa fa il seguente esempio della documentazione?

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

Non capisco i risultati:

[1] 1 2 4 

Grazie.

+1

Vedere "interazione (ind)' che genera tutte le combinazioni di "fattore" "livelli"; nel tuo esempio l'uscita che ottieni corrisponde alla corrispondenza di "X" in "livelli (interazione (ind)) [c (1, 2, 4)]" secondo l'argomento "INDICE". Vedi anche: 'tapply (1: 5, list (c (1, 2, 2, 1), c (" A "," A "," B "," B "," A "))) 'che può essere visto, più chiaramente, come 'tapply' raggruppamento" X "di" INDICE " –

+0

Il risultato di' ix <- tapply (X, INDICE) 'non dipende da' X' - solo su 'INDICE' - e, in particolare, se 'INDICE' è una lista allora' ix' equals 'as.integer (do.call (interaction, INDEX))' –

risposta

3

Se si esegue tapply con una funzione specifica (non NULL), dicono sum, come in aiuto, vedrete che il risultato è un array a 2 dimensioni con NA in una cella:

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

Significa che una combinazione di fattori, vale a dire (1, B), è assente. Quando FUN è NULL, restituisce indici vettoriali corrispondenti a tutte le combinazioni di fattori presenti. Per verificare questo:

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

Una cosa da ricordare, la funzione specificata può tornare NA di per sé, come nel seguente esempio giocattolo:

> 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 

Quindi, in generale, NA non significa che un la combinazione di fattori è assente.

Problemi correlati