2013-02-04 16 views
7

Próbuję użyć funkcji multicoreparallel z data.table i nie jestem w stanie wymyślić właściwą drogę, aby to zrobić. Kod:Wielordzeniowe i data.table w 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 

Chciałbym zadzwonić collect() na ten temat, ale te nie są już parallel obiekty. Jak to zrobić?

+0

Co jest nie tak z 'x = dtb [, collect (równolegle (a + 1)), by = b]'? – Ryogi

+0

zbierać czeka na równoległe do końca – Alex

+0

@alex trudno zrozumieć, dlaczego collect() oczekiwania na równoległość() jest problemem. Trudno jest również ekstrapolować twój przykład na prawdziwy problem i dlatego wiesz, czego tak naprawdę chcesz od tego. Czy możesz nam pomóc zrozumieć? – ndoogan

Odpowiedz

2

myślę, że to jest wzdłuż linii, co chcesz:

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

Powodem nie masz parallel obiektów dłużej i nie mógł uruchomić collect dlatego, że zostały przekształcając je do a list, zamiast przechowywać je w postaci listy, co zrobiłem powyżej.