【问题标题】:parallel::clusterExport - non exported library/package functionparallel::clusterExport - 非导出库/包函数
【发布时间】:2016-08-08 18:43:26
【问题描述】:

类似于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 ===========================================================================================================================================

【问题讨论】:

    标签: r parallel-processing testthat


    【解决方案1】:

    您可以使用对 clusterCall 的等效调用来执行此操作。

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

    查看clusterExport 的定义以验证这是在做同样的事情。

    【讨论】:

      【解决方案2】:

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

      以下工作,但导致 1 R CMD 检查说明:

      R CMD 检查结果
      0 个错误 | 0 个警告 | 1 条注释
      检查 R 代码中的依赖关系...注意
      在其代码中有对包命名空间的 ::: 调用。一袋 几乎从不需要为自己的对象使用 :::: 'count_compare'

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

      也许library(testthat) 的开发人员之一可以针对testthat 框架未捕获此问题的问题提供解决方案/更新。基于Hadley's R-Journal article(pg7 使用期刊编号),我猜这与环境用于测试的方式有关。但是,这只是一个猜测。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-26
        • 2021-09-20
        • 1970-01-01
        • 2022-08-17
        相关资源
        最近更新 更多