Sto facendo alcune aggregazioni su un data.table (pacchetto eccellente !!!) e ho trovato la variabile .SD molto utile per molte cose. Tuttavia, utilizzarlo rallenta notevolmente il calcolo quando ci sono molti gruppi. Segue un esempio:R data.table aggregazione lenta quando si utilizza .SD
# A moderately big data.table
x = data.table(id=sample(1e4,1e5,replace=T),
code=factor(sample(2,1e5,replace=T)),
z=runif(1e5)
)
setkey(x,id,code)
system.time(x[,list(code2=nrow(.SD[code==2]), total=.N), by=id])
## user system elapsed
## 6.226 0.000 6.242
system.time(x[,list(code2=sum(code==2), total=.N), by=id])
## user system elapsed
## 0.497 0.000 0.498
system.time(x[,list(code2=.SD[code==2,.N], total=.N), by=id])
## user system elapsed
## 6.152 0.000 6.168
Sto facendo qualcosa di sbagliato? Dovrei evitare .SD a favore di singole colonne? Grazie in anticipo.
Grazie mille! Sono stato ingannato dalla frase "L'oggetto .SD è implementato in modo efficiente internamente ed è più efficiente del passare un argomento ad una funzione" e non ha capito "Per favore non farlo però: DT [, sum (.SD [," vendite ", con = FALSE]), da = grp]" a causa del con = FALSE. Questo accelererà molto il mio codice! – vsalmendra
@vsalmendra Ah, sì, potrebbe essere più chiaro. È il tipo di cosa che è stata lasciata alla discussione della comunità in passato. In definitiva speriamo di migliorare l'ottimizzazione di 'j' in modo che gli utenti non debbano sapere cose come questa. –
@vsalmendra Ora ho migliorato le FAQ 2.1 per la prossima versione. –