我试图在并行处理时从C50模型中提取规则。 This回答帮助我从模型对象中提取规则。但是,由于我需要并行处理模型,我使用的是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
确实可用于群集中的每个工作人员。我通过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失败 - “未找到对象'数据'
问题是as.party.C5.0
尝试从整个工作区访问数据对象。
答案 0 :(得分:2)
这是一个错误。我们遵循Achim的建议并使用terms
对象,除非我们get the case wrong。
尝试从github通过
安装devtools::install_github("topepo/C5.0/pkg/C50")
您的示例适用于此版本。