R包构建,"对象' xxx'找不到"

时间:2017-08-24 20:01:20

标签: r foreach roxygen2

我试图从在包外部工作的代码构建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()中的所有对象导出到每个slave。

我无法理解为什么有些变量似乎被传递而不是其他变量。我是否需要在调用它的函数的文件中将其明确指定为@param?

1 个答案:

答案 0 :(得分:1)

使用foreach,更好的方法是让所有需要的变量出现在调用foreach的同一环境中。基本上,我总是在函数中使用foreach并将foreach中所需的所有变量传递给此函数。

好像foreach无法看到其调用函数。你不需要出口任何东西。对于函数,请使用package::function(就像在包中一样,这样您就不需要@import个包)。