我正在尝试从包外部工作的代码构建 R 包。 我的第一次尝试是相当复杂的嵌套函数,最终使用 doMPI 和 foreach 进行并行处理。 也在 Ubuntu 16.04 上使用 RStudio 1.01.43。 我构建了软件包并且工作正常。 然后,当我尝试运行调用下一个的顶级函数时,它会抛出错误:
Error in { : task 6 failed - "object 'RunOys' not found"
在调用顶级函数之前,我手动设置布尔变量 RunOys=TRUE,当它下降到为 ifelse 语句调用此变量的那个时,它会失败。 在我调用顶级函数之前,我检查了 globalenv(( 和
> RunOys
[1] TRUE
在foreach并行代码中,我有以下语句,该语句在编译成R包之前有效:
FinalCalcs <- function (...) {
results <- data.frame ( foreach::`%dopar%`(
foreach::`%:%`(foreach::foreach(j = 1:NumSim, .combine = acomb,
.options.mpi=opts1),
foreach::foreach (i = 1:PopSize, .combine=rbind,
.options.mpi=opts2,
.export = c(ls(globalenv())),
.packages = c("zoo", "msm", "FAdist", "qmra"))),
{
它应该将 globalenv(( 中的所有对象导出到每个从站。
我不明白为什么有些变量似乎被传递而不是其他变量。 我是否需要在调用它的函数的文件中将其显式指定为@param?
对于foreach
,更好的方法是将所有需要的变量存在于调用foreach
的同一环境中。所以基本上,我总是在函数中使用foreach
,并将foreach
中需要的所有变量传递给这个函数。
做foreach
看不到它的调用函数一样。您无需导出任何内容。对于函数,请使用package::function
(就像在包中一样,这样你就不需要@import
包了(。