我在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""
答案 0 :(得分:8)
我没有使用过doSMP,但我做了一些挖掘,看起来this post遇到了类似的问题。
所以看起来你应该能够做到:
foreach( i=1:2, .packages="data.table") %dopar% {
DF[J("a"),]
}
我无法测试,因为我没有方便的Windows机器。
答案 1 :(得分:7)
问题是R范围问题。通过 默认情况下,foreach()会寻找 变量在它自己定义 '环境'。任何定义的对象 在它的范围之外需要 明确地通过传递给它 '.export'论证。
在您的情况下,您需要修改 你的'foreach()'号召传递给你 对象'DF'和'J':
...
foreach(i=1:2, .export=c("DF","J")) %dopar% {
...
我还没有尝试过任何解决方案,但我相信JD和RC ......