我试图从在包外部工作的代码构建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?
答案 0 :(得分:1)
使用foreach
,更好的方法是让所有需要的变量出现在调用foreach
的同一环境中。基本上,我总是在函数中使用foreach
并将foreach
中所需的所有变量传递给此函数。
好像foreach
无法看到其调用函数。你不需要出口任何东西。对于函数,请使用package::function
(就像在包中一样,这样您就不需要@import
个包)。