R CRAN使用并行功能时检查失败

时间:2018-05-28 17:45:00

标签: r cran

我想向CRAN提交一个使用parallel::makeCluster(parallel::detectCores())进行并行计算的软件包。

当我构建包时,一切正常,但是当我检查包(devtools::check(document = FALSE))时,它会返回错误:

Running examples in ‘TESTER-Ex.R’ failed
The error most likely occurred in:

> base::assign(".ptime", proc.time(), pos = "CheckExEnv")
> ### Name: hello_world
> ### Title: Prints hello world
> ### Aliases: hello_world
> 
> ### ** Examples
> 
> hello_world()
Error in .check_ncores(length(names)) : 8 simultaneous processes spawned
Calls: hello_world -> <Anonymous> -> makePSOCKcluster -> .check_ncores
Execution halted

我在MWE包(TESTER)中重新创建了错误,它只有一个函数hello_world,我已将整个TESTER-package上传到GitHub,但它应该可以从以下函数重现。

#' Prints hello world
#'
#' @return nothing
#' @export
#'
#' @examples
#' hello_world()
hello_world <- function() {

  # initiate cluster
  cl <- parallel::makeCluster(parallel::detectCores())

  # stop cluster
  parallel::stopCluster(cl)

  cat("Hello World\n")
  return(invisible(NULL))
}

我查看了Writing R Extensions,但无法找到与此问题相关的任何内容,也无法在SO上找到问题。

任何想法是什么导致此错误以及如何解决它?

2 个答案:

答案 0 :(得分:10)

CRAN将包可用的核心数限制为2, 出于性能原因。 邮件列表中有一个帖子, 我相信, 但我现在找不到它。

我在测试中使用了以下内容:

chk <- Sys.getenv("_R_CHECK_LIMIT_CORES_", "")

if (nzchar(chk) && chk == "TRUE") {
    # use 2 cores in CRAN/Travis/AppVeyor
    num_workers <- 2L
} else {
    # use all cores in devtools::test()
    num_workers <- parallel::detectCores()
}

答案 1 :(得分:0)

我认为问题是没有加载库并行

在您的NAMESPACE文件中,您应该加载包

import(parallel)