R中的并行R执行问题

时间:2011-04-01 12:41:02

标签: r parallel-processing

我在Windows 7中使用doSMP作为并行后端,使用R 2.12.2。我发生错误,并想了解可能的原因。以下是一些重现错误的示例代码。

require(foreach)
require(doSMP)
require(data.table)
wrk <- startWorkers(workerCount = 2)
registerDoSMP(wrk)
DF = data.table(x=c("b","b","b","a","a"),v=rnorm(5))
setkey(DF,x)
foreach( i=1:2)  %dopar% {
    DF[J("a"),]
}

错误消息是

Error in { : task 1 failed - "could not find function "J""

2 个答案:

答案 0 :(得分:8)

我没有使用过doSMP,但我做了一些挖掘,看起来this post遇到了类似的问题。

所以看起来你应该能够做到:

foreach( i=1:2, .packages="data.table")  %dopar% {
    DF[J("a"),]
}

我无法测试,因为我没有方便的Windows机器。

答案 1 :(得分:7)

好吧,我问革命计算,史蒂夫韦勒(RC)回复说:

  

问题是R范围问题。通过   默认情况下,foreach()会寻找   变量在它自己定义   '环境'。任何定义的对象   在它的范围之外需要   明确地通过传递给它   '.export'论证。

     

在您的情况下,您需要修改   你的'foreach()'号召传递给你   对象'DF'和'J':

...

foreach(i=1:2, .export=c("DF","J")) %dopar% {
...

我还没有尝试过任何解决方案,但我相信JD和RC ......