2014-06-11 9 views
5

Sto cercando di capire meglio come funzionano alcune delle variabili speciali nel pacchetto data.table. Uno di questi è l'istruzione .BY. Non ho visto molti esempi di persone che lo usano, ma la documentazione implica che è utile per la trama.Uso di .BY e .EACHI nel pacchetto data.table

Ad esempio, il seguente codice sembra funzionare abbastanza bene (che mostra un grafico per ciascuna delle specie e assegnando il titolo giusto per ogni appezzamento) in data.table 1.9.3:

iris <- data.table(iris) 
iris[,plot(Sepal.Length ~ Sepal.Width, main = unlist(.BY)), by = Species] 

Anche se questo codice non funziona come inteso da me:

iris[ , plot(Sepal.Length ~ Sepal.Width, main = .BY), by = Species] 

Perché questi due sono diversi? Dai commenti, non sembra essere un problema in data.table 1.9.2. In quali altri modi potrebbe essere utile utilizzare l'istruzione .BY? In che modo è diverso rispetto alla dichiarazione .EACHI?

+0

Ottengo risultati identici utilizzando entrambe le dichiarazioni. Cosa dovrebbe essere diverso? – thelatemail

+1

Interessante ... Ho appena provato questo con '' 'data.table''' 1.9.2 e ho ottenuto risultati identici (ma con i titoli 1,2 e 3). Ma in 1.9.3, ottengo risultati diversi per i due pezzi di codice (uno con i nomi di specie e uno restituisce un errore). –

+2

Sì, sto usando 1.9.2 - probabilmente vale la pena di modificare il tuo post per includere che questo è un problema presente nella 1.9.3. – thelatemail

risposta

4

.BY è un nomelist contenente i valori delle variabili by.

passaggio di un elenco senza nome per main funzionerà, comunque un nome lista fallirà (totalmente estranei a data.table

plot(1, main = list(1)) 
# works.... 
plot(1, main = list(s=1)) 
# Error in title(...) : invalid graphics parameter 

C'è una recente impegnano a data.table 1.9.3 che ha fissato un bug per che fare con la denominazione di `.BY Closes bug #5415. .BY gets names attribute set properly nel mese di aprile di quest'anno.

Se aveste più di 1 "da" variabile, si vorrebbe essere in grado di concatenare in qualche modo

01.235.164,106174 millions

forse

iris[,plot(Sepal.Length~Sepal.Width,main=do.call(paste,.BY)),by=Species] 

funzionerà (a meno che non si dispone di una colonna chiamata collapse!)

EACHI è completamente estraneo a questo. Si prega di leggere il NEWS for data.table 1.9.3 per una comprensione di questo.

Problemi correlati