Quando si utilizza il pacchetto data.table
, sono un po 'insicuro di quando ho bisogno di setkey()
. Ad esempio, quando si utilizza l'operatore :=
con l'opzione by
, le cose sembrano essere molto veloci anche se non ho impostato una chiave. Qualcuno potrebbe chiarire quando è necessario setkey()
e quando non lo è? E se non è necessario prima di chiamare con by
, allora come è veloce il pacchetto data.table
poiché presumibilmente deve fare la stessa cosa di apply
nello standard data.frame
R eseguendo una ricerca sequenziale anziché una binario poiché non sapere se il mio data.table
è effettivamente ordinato per argomento a by
.setkey e: = operator, data.table, R
Grazie
fantastico, grazie! stava scavando attraverso le FAQ e deve aver perso questo. – Alex
'ad hoc by' è veloce perché usa anche l'ordinamento radix? – colinfang
@colinfang Difficile rispondere a questa domanda poiché sono presenti diverse funzionalità. I motivi variano in base a query e dati. Ad hoc 'by' usa l'ordinamento digitale per trovare i gruppi per le colonne intere, quindi dipende dal tipo e dal numero di colonne che vengono" by'-ed ". Quindi, una volta individuati i gruppi, un motivo per cui il raggruppamento è veloce è perché la memoria viene allocata per il gruppo più grande una volta in primo piano, che viene quindi riutilizzata per tutti i gruppi. E solo per le colonne necessarie per 'j'. Vedi FAQ 3.1. Prova la modalità 'verbose = TRUE' perché rivela quanto tempo è trascorso a trovare i gruppi (inc radix sort) vs iterandoli. –