与检查点一起使用foreach时,找不到R包的内部功能

时间:2018-11-02 11:04:57

标签: r r-future

这是此问题的后续问题:How to set .libPaths (checkpoint) on workers when running parallel computation in R

基于答案,我将以下代码(简化示例)放入了名为“ test1”的R包中:

#' @export
f <- function() {
  `%dopar%` <- foreach::`%dopar%`
  doFuture::registerDoFuture()
  libs <- .libPaths()

  res <- foreach::foreach(x = 1:2) %dopar% {

    cat(sprintf("Initial Library paths used by worker (PID %d):\n", Sys.getpid()))
    cat(sprintf(" - %s\n", sQuote(.libPaths()[1])))

    ## Use the same library paths as the master R session
    .libPaths(libs)

    cat(sprintf("Library paths used by worker (PID %d):\n", Sys.getpid()))
    cat(sprintf(" - %s\n", sQuote(.libPaths()[1])))

    x + g()
  }

  res
}


g <- function() {
  h()
}

h <- function() {
  runif(1)
}

然后我打电话给checkpoint::checkpoint("2018-07-24")并将软件包安装到检查点库中。然后,以下代码会产生此错误:

checkpoint::checkpoint("2018-07-24")
future::plan("multisession")
test1::f()
  

工作者使用的初始库路径(PID 16880):    -'C:/Programme/R-3.5.1/library'

     

工作者使用的库路径(PID 16880):    -'... /。checkpoint / 2018-07-24 / lib / x86_64-w64-mingw32 / 3.5.1'

     

工作者使用的初始库路径(PID 3916):    -'C:/Programme/R-3.5.1/library'

     

工作者使用的库路径(PID 3916):    -'... /。checkpoint / 2018-07-24 / lib / x86_64-w64-mingw32 / 3.5.1'

     

{中的错误:任务1失败-“找不到函数“ h””

当我在test1:::g()调用中显式调用foreach时,它可以工作。有人可以解释一下,为什么我必须在:::的foreach循环中显式调用我自己的包的函数吗?看来似乎找到了g(),但找不到h()吗?

0 个答案:

没有答案