繁体   English   中英

R foreach具有未导出功能的并行处理(以C50为例)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM