[英]R foreach parallel processing with unexported functions (with C50 example)
我试图在并行处理时从C50模型中提取规则。 这个答案帮助我从模型对象中提取了规则。 但是,由于我需要并行处理模型,因此我在使用foreach。 这似乎与未导出的函数有关,因为它看不到数据对象。 这是一些可复制的代码:
library(foreach)
library(doMC)
registerDoMC(2)
j = c(1,2)
result = foreach(i = j) %dopar% {
library(C50)
d = iris
model <- C5.0(Species ~ ., data = d)
modParty <- C50:::as.party.C5.0(model)
return(modParty)
}
在这种情况下,它只需两次计算模型。 在我的真实代码中, d
是一个始终在变化的样本,该样本也在foreach函数中生成。
我的调试显示,杂项行是modParty <- C50:::as.party.C5.0(model)
。 引发错误
{中的错误:任务1失败-“未找到对象'd'”
即使d
对于集群中的每个工作程序肯定可用。 我通过logging
包的loginfo(ls())
将logging
记录到文件中进行了检查。
为什么函数看不到对象d
? 任何帮助,不胜感激。
作为附加信息,这里是traceback()
> traceback()
3: stop(simpleError(msg, call = expr))
2: e$fun(obj, substitute(ex), parent.frame(), e$data)
1: foreach(i = j) %dopar% {
library(C50)
d = iris
model <- C5.0(Species ~ ., data = d)
modParty <- C50:::as.party.C5.0(model)
return(modParty)
}
编辑
只是为了澄清:它与foreach
无关。 与正常功能相同的错误:
library(C50)
d = iris
getC50Party = function(dat){
model <- C5.0(Species ~ ., data = dat)
modParty <- C50:::as.party.C5.0(model)
return(modParty)
}
c50Party = getC50Party(d)
{中的错误:任务1失败-“未找到对象'dat'”
问题是as.party.C5.0
尝试从整个工作空间访问数据对象。
这是一个错误。 我们确实遵循Achim的建议,并使用terms
object,除非我们弄错了案例 。
尝试通过从github安装
devtools::install_github("topepo/C5.0/pkg/C50")
您的示例适用于此版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.