parallel :: clusterExport - 非导出的库/包函数

时间:2016-08-08 18:43:26

标签: r parallel-processing testthat

类似于this question

但是我如何clusterExport一个包的非导出函数到集群?出于某种原因,这在提交给CRAN之前通过my tests但是没有在生产中工作。显然,我想修复并重新提交给CRAN。

library(imputeMulti)
library(parallel)
imputeMulti:::count_compare # function to be exported

nnodes <- 2L
cl <- parallel::makeCluster(nnodes)    

parallel::clusterExport(cl, varlist= c("count_compare")) # fails -- but initially passed tests
parallel::clusterExport(cl, varlist= c("count_compare"), envir= as.environment("package:imputeMulti")) # also fails

我正在使用群集导出来避免CRAN / R CMD检查说明“在包中使用:::”。显然,我可以导出count_compare,但这不是一个理想的选择。

任何帮助表示赞赏!

添加测试信息:

devtools::test("imputeMulti", "count_levels")
Loading imputeMulti
Testing imputeMulti
int- count_levels works: ...............................

DONE ===========================================================================================================================================

2 个答案:

答案 0 :(得分:1)

您可以使用对clusterCall的同等号码来执行此操作。

parallel::clusterCall(cl, assign, "count_compare", count_compare, envir = .GlobalEnv)

请参阅clusterExport的定义,以验证这是做同样的事情。

答案 1 :(得分:0)

根据我的测试和工作,我不会在未导出的库函数上使用parallel::clusterExport

以下有效,但会产生1 R CMD检查记录:

  

R CMD检查结果
  0错误| 0警告| 1注意事项   检查R代码中的依赖关系...注意
  在我的代码中有:::调用包的命名空间。一套     几乎从不需要使用:::作为自己的对象:     &#39; count_compare&#39;

count_compare <- imputeMulti:::count_compare 
parallel::clusterExport(cl, varlist= c("count_compare"), envir= 1)

也许library(testthat)的一位开发人员可以提供关于testthat框架问题的解决方案/更新,而不是解决这个问题。基于Hadley's R-Journal article(使用期刊编号的第7页),我猜测这与环境如何用于测试有关。但是,这只是猜测。

注意:Hadley已经确认这是testthat通过电子邮件通信错过的原因。