gpt4 book ai didi

使用未导出函数的 R foreach 并行处理(以 C50 为例)

转载 作者:行者123 更新时间:2023-11-30 09:36:57 26 4
gpt4 key购买 nike

我正在尝试在并行处理时从 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) 。它抛出错误

Error in { : task 1 failed - "Object 'd' not found"

即使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)

Error in { : task 1 failed - "Object 'dat' not found"

问题是 as.party.C5.0尝试从整个工作区访问数据对象。

最佳答案

这是一个错误。我们确实遵循 Achim 的建议并使用 terms 对象,除非 get the case wrong

尝试通过 github 安装

devtools::install_github("topepo/C5.0/pkg/C50")

您的示例适用于此版本。

关于使用未导出函数的 R foreach 并行处理(以 C50 为例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37515454/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com