Continuazione per la risposta di Joshua, c'è una correzione se si desidera velocizzare questa operazione. È ispirato all'ideologia di Ridurre la mappa e ho fatto un POC su un set di dati campione qualche tempo fa.
Ho usato la libreria nevicata, credo che si possa lavorare anche con doMC.
# On my phone, please pardon typos/bugs
test <- data.frame(x=1:1000000, y=rep(c(1:20), 500))
testList = list()
testList[[1]] <- test[c(1:250000),]
testList[[2]] <- test[c(250001:500000),]
testList[[3]] <- test[c(500001:750000),]
testList[[4]] <- test[c(750001:1000000),]
# Write a function for the above - Need to find optimum number of splits
sfInit(parallel = TRUE, cpus=4)
sfCluster(plyr)
meanList = sfClusterSpplyLB(testList, function(x) ddply(test, "y", mean))
sfStop()
aggregate(meanList, by=list(y), FUN=mean)
Questo potrebbe aiuto, dato che ora stiamo facendo la routine split-combinano in modo distribuito. Questo funziona per mezzi quando la dimensione delle divisioni sono le stesse, funziona per somme, min/max, conteggio ecc. OK, ma ci sono alcune operazioni che non possiamo usare per questo.
A seconda dei calcoli effettivi che si stanno eseguendo, il pacchetto 'data.table' potrebbe davvero velocizzarli. Per tutte le sue virtù, l'implementazione 'split-apply-combine' nel pacchetto 'plyr' è in realtà piuttosto lenta, mentre' data.table' è innanzitutto progettata per la velocità. (Se sei incuriosito, cerca SO per qualcosa come '[r] [data.table] plyr' per ottenere molti possibili punti di partenza). –
Grazie Josh, darò un'occhiata. – Alex