2013-02-04 6 views
7

Ich versuche multicore Funktion parallel mit data.table zu verwenden und bin nicht in der Lage, den richtigen Weg zu finden, dies zu tun. Code:Multicore und data.table in R

require(multicore) 
require(data.table) 
dtb = data.table(a=1:10, b=1:2) 
x = dtb[,parallel(a+1),by=b] 

> x 
    b pid fd 
1: 1 12243 3 
2: 1 12243 6 
3: 2 12247 4 
4: 2 12247 8 

Ich möchte collect() auf diese nennen, aber diese sind nicht mehr parallel Objekte. Wie sollte man das machen?

+0

Was ist los mit 'x = dtb [, sammeln (parallel (a + 1)), durch = b]'? – Ryogi

+0

sammeln warten auf parallel zu beenden – Alex

+0

@alex es ist schwer zu verstehen, warum Collect() Warten auf Parallel() ist ein Problem. Es ist auch schwierig, Ihr Beispiel auf ein wirkliches Problem zu übertragen und daher zu wissen, was Sie wirklich wollen. Kannst du uns helfen zu verstehen? – ndoogan

Antwort

2

Ich denke, das entlang der Linien ist von dem, was Sie wollen:

collect(dtb[, list(jobs = list(parallel(a+1))), by = b][, jobs]) 

Der Grund, warum Sie nicht parallel Objekte mehr hatte und konnte nicht laufen ein collect ist, weil man sie - Umwandlung wurden a list, anstatt sie in eine Liste zu speichern, was ich oben getan habe.