UPDATE: Vecchio domanda ... è stato risolto da v1.5.3 data.table nel febbraio 2011.R: Quando si utilizza data.table come faccio a ottenere colonne di y quando faccio x [y]?
Sto cercando di usare il pacchetto data.table
, e davvero come gli incrementi nella velocità sto ottenendo, ma stumped da questo errore quando faccio x[y, <expr>]
dove x
e y
sono "data-tavoli" con la stessa chiave, e <expr>
contiene i nomi delle colonne di entrambi x
e y
:
require(data.table)
x <- data.table(foo = 1:5, a = 5:1)
y <- data.table(foo = 1:5, boo = 10:14)
setkey(x, foo)
setkey(y, foo)
> x[y, foo*boo]
Error in eval(expr, envir, enclos) : object 'boo' not found
aggiornamento regolare TE ... Per chiarire la funzionalità Sto cercando nell'esempio di cui sopra: ho bisogno di fare l'equivalente di quanto segue:
with(merge(x,y), foo*boo)
Tuttavia, secondo l'estratto di sotto della data.table
FAQ, questo dovrebbe hanno lavorato :
Infine, anche se sembra come se x [y] non restituisce le colonne in y, si può effettivamente utilizzare le colonne da y nell'espressione j. Questo è ciò che intendiamo per per join dell'ambito ereditato. Perché non basta restituire l'unione di tutte le colonne da xe ye quindi eseguire le espressioni su quello? Si riduce a eciency del codice e ciò che è più veloce da programmare. Quando scrivi x [y, foo boo], data.table automaticamente ispeziona l'espressione j per vedere quali colonne utilizza. Sarà solo sottoinsieme, o gruppo, solo quelle colonne. La memoria viene creata solo per le colonne utilizzate da j . Diciamo che foo è in xe boo è in y (insieme ad altre 20 colonne in y). Non è x [y, foo boo] più veloce nel programma e più veloce da eseguire di un passaggio di merge seguito da un altro sottogruppo passaggio?
Sono a conoscenza di this question che ha risolto un problema simile, ma non sembra che sia stato risolto in modo soddisfacente. Qualcuno sa cosa mi manca o fraintendimento? Grazie. UPDATE: Ho chiesto sulla mailing list di help della tabella di dati e sull'autore del pacchetto (Matthew Dowle) replied che le FAQ sopra citate sono errate, quindi la sintassi che sto usando non funzionerà al momento, cioè non posso riferirmi a le colonne y
nell'argomento j
(ie second) quando eseguo x[y,...]
.
Ma l'hai chiesto qualche tempo fa ed è stato risolto dalla versione 1.5.3 rilasciata a CRAN nel febbraio 2011. Per favore guarda le NEWS, nuove? FAQ.table e corrette. –
@Matthew grazie, sì, so che è stato risolto dall'ultima versione, e sono contento che tu l'abbia indicato qui, quindi è chiaro agli altri. –