【问题标题】:R package design: how to export internal functions to a clusterR包设计:如何将内部函数导出到集群
【发布时间】:2021-05-18 23:23:12
【问题描述】:

我正在开发一个 R 包,我需要在使用 parallel::parLapply 的集群上运行函数 myfunmyfun 从我的包中调用了几个额外的函数,这些函数又调用了更多的函数,其中一些函数有多个方法……所以通过名称显式地将所有函数和方法传递给集群非常麻烦。

据我了解,standard advice 是运行 parallel::clusterEvalQ({library("my_package")})。但是对library("my_package") 的调用显然是对 R-CMD-check 的厌恶。而且我有理由相信my-package:::function 也不会在 CRAN 上飞行。

这里的标准方法是什么?我需要按名称导出每个相关的函数和方法吗?

【问题讨论】:

  • 内部函数可能对包的用户不可用,但可以被包内的任何函数轻松调用。你真的用parallel测试过代码吗?
  • @SinhNguyen 问题是如何将函数导出到集群。我当然测试过代码,但我真的不知道我在做什么,因为我主要在 Mac 上工作并通过分叉来做多核工作。
  • @SinhNguyen 另请注意,挑战不是在本地获得有效的实现;挑战在于获得通过 R-CMD-check 的实现。
  • 只有当你想在 CRAN 上提交你的包时,R CMD 检查才是真正重要的,世界不会因为你收到警告就结束
  • 我确实想把我的包裹放在 CRAN 上 :)

标签: r parallel-processing r-package


【解决方案1】:

好的,这似乎可行,(它通过了 GitHub 上的 R-CMD-check):

parallel::clusterExport(cl = cl, 
                        unclass(lsf.str(envir = asNamespace("my_package"), 
                                        all = T)),
                        envir = as.environment(asNamespace("my_package"))
                        )

希望对其他人有用。

globals 包可能还提供了一个不错的解决方案,但我无法让它通过对 GitHub 操作的检查。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 2021-03-27
    相关资源
    最近更新 更多