但是我如何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 ===========================================================================================================================================
答案 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
通过电子邮件通信错过的原因。