gap*_*ppy 9 parallel-processing r
我在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"),]
}
Run Code Online (Sandbox Code Playgroud)
错误消息是
Error in { : task 1 failed - "could not find function "J""
Run Code Online (Sandbox Code Playgroud)
我没有使用过doSMP,但我做了一些挖掘,看起来这个帖子遇到了类似的问题.
所以看起来你应该能够做到:
foreach( i=1:2, .packages="data.table") %dopar% {
DF[J("a"),]
}
Run Code Online (Sandbox Code Playgroud)
我无法测试,因为我没有方便的Windows机器.
好的,我问过Revolution计算,而Steve Weller(RC)回复说:
问题是R范围问题.默认情况下,foreach()将查找在其自己的"环境"中定义的变量.在其范围之外定义的任何对象都需要通过'.export'参数显式传递给它.
在您的情况下,您需要修改'foreach()'调用以传入对象'DF'和'J':
...
foreach(i=1:2, .export=c("DF","J")) %dopar% {
...
Run Code Online (Sandbox Code Playgroud)
我还没有尝试过任何解决方案,但我相信JD和RC ......