2013-02-04 32 views
7

Tôi đang cố gắng sử dụng chức năng multicoreparallel với data.table và tôi không thể tìm ra đúng cách để thực hiện việc này. Mã số:đa lõi và dữ liệu.table trong 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 

Tôi muốn gọi collect() nhưng điều này không còn là đối tượng parallel. Làm thế nào nên làm điều này?

+0

Có gì sai với 'x = dtb [, thu thập (song song (a + 1)), bằng = b]'? – Ryogi

+0

thu thập chờ đợi song song để kết thúc – Alex

+0

@alex thật khó để hiểu tại sao thu thập() chờ đợi song song() là một vấn đề. Cũng khó để ngoại suy ví dụ của bạn thành một vấn đề thực sự, và do đó biết những gì bạn thực sự muốn từ điều này. Bạn có thể giúp chúng tôi hiểu không? – ndoogan

Trả lời

2

Tôi nghĩ rằng đây là dọc theo dòng của những gì bạn muốn:

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

Lý do bạn không có parallel đối tượng nữa và không thể chạy một collect là bởi vì bạn đã chuyển đổi chúng - a list, thay vì lưu trữ chúng trong một danh sách, đó là những gì tôi đã làm ở trên.

Các vấn đề liên quan