R 包构建,"object 'xxx' not found" 的原因

R package build, reason for "object 'xxx' not found"

我正在尝试从包外工作的代码构建 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 包)。