如何在“R”中的foreach循环中导出多个函数或包

Posted

技术标签:

【中文标题】如何在“R”中的foreach循环中导出多个函数或包【英文标题】:How to export multiple function or packages in foreach loop in "R" 【发布时间】:2018-01-26 19:14:09 【问题描述】:

我正在尝试通过在 R 中使用 doParallel 包来减少代码的运行时间。

我正在调用一个函数awareRateSIR,该函数的主体中使用了一些额外的包。我收到一些错误,例如

找不到函数“vcount”和..

我知道vcount 是包igraph 的一个函数,在awareRateSIR 中使用)但它不是唯一的。我怎么解决这个问题?我认为我应该传递在我的函数awareRateSIR 中使用的所有包名称,但我不知道如何在foreach 中导出多个函数或如何导出多个包名称。

这是我的代码:

tp<-foreach(i=1:iter,  .inorder = FALSE, .export = "awareRateSIR",
          .packages = "igraph", .packages="doParallel")%dopar%
tp <- awareRateSIR(graphContact, graphCom,state)
return(tp)

如果我不通过这些包我会得到错误状态如果我通过所有包我会得到一些功能未知的错误:

foreach 中的错误(i = 1:iter,.inorder = FALSE,.export = "awareRateSIR", : 形式参数 ".packages" 被多个匹配 实际论证”

提前致谢

【问题讨论】:

【参考方案1】:

通常,使用foreach时不需要导出任何变量、函数或包。

对于变量和函数,它们只需要与foreach 语句处于相同的环境中(更好的是创建一个只传递你需要的函数的函数)。

当需要其他包的功能时,你只需要使用package::function,就像在包里面一样。

【讨论】:

【参考方案2】:

您应该使用c 函数传递所有需要的包,如下所示:

tp<-foreach(i=1:iter,  .inorder = FALSE, .export = "awareRateSIR",
          .packages = c("igraph", "doParallel"))%dopar%
tp <- awareRateSIR(graphContact, graphCom,state)
return(tp)

【讨论】:

以上是关于如何在“R”中的foreach循环中导出多个函数或包的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义函数加载到 R 中的 foreach 循环中?

如何将许多变量和函数从全局环境导出到 foreach 循环?

在 foreach 循环中找不到函数

在 R 中使用 foreach 循环读取 MATLAB .mat 文件时出现问题

如何将多个文件扩展名添加到文件:Foreach 循环容器 SSIS 中的输入字段

R:foreach 循环如何找到应该调用的函数?