2016-01-31 136 views
0

我只是无法在并行foreach中使用ovun.sample。在R doParallel foreach循环中运行ovun.sample

下面是最小的工作示例。

library(doParallel) 
library(ROSE) # ovun.sample 

if(!getDoParRegistered()){ 
    registerDoParallel(cores=detectCores()) 
} 

foreach(i=1:2,.combine=rbind, .packages=c("ROSE")) %dopar% { 
    my_data = iris[iris$Species != "setosa",] 
    under_data <- ovun.sample(Species ~ ., data=my_data, N=40, seed = 1)$data 
} 
print(r) 

我得到错误:

Error in { : task 1 failed - "object 'my_data' not found" 

任何想法,我错过了什么。或者也许是另一种类似于与doParallel一起使用的ROSE的过度/不足采样包?在Windows上运行。

回答

0

foreach循环对于寻找my_data的地方有不同的环境背景。尝试用data=get("my_data", sys.frame(1))代替data=my_data

另一种方法是foreach之前设置数据变量并使用.export=my_data选项在foreach呼叫,以确保数据被执行前推到每个芯。

+0

感谢您的建议,但'data = get(“my_data”,sys.frame(1))'也不起作用。我也试过.export = c(“my_data”),也不起作用。 但是这是有效的: 结果< - foreach(i = 1:2,.combine = rbind,.packages = c(“SDR”,“ROSE”))%dopar%my_data = iris [iris $种类!= “setosa”,] 总和(虹膜$物种== “弗吉尼亚”) } 打印(结果)' 我只是不知道为什么不与功能ovun.sample工作。 –

+0

对于'.export = my_data'工作,'my_data'必须在主代码的foreach循环之前定义。这真的应该工作。 它必须是关于执行环境。 ''ovun.sample'将'data'选项描述为'如果未指定,则变量取自“环境(公式)。”。这表明它可能是公式中的'.'和'my_data'之间的冲突。如果完全删除'data = my_data'选项会发生什么情况? –