使用另一个 R 包中未导出的函数?

Using un-exported function from another R package?

我经常使用其他未导出的包中的实用程序类型函数: pkg:::fun()。我想知道我是否可以在我自己的 R 包中的 new functionality/scope 中使用这样的函数。这里正确的方法是什么?将包包含在我的描述文件中就足够了吗?

  • 总结来自@baptise 等的评论...:[=​​11=]

  • ::: 不允许在 CRAN 上使用,因此选项:

    1. 请作者导出它,以便您可以通过标准导入或建议在您的包中使用它。
    2. 复制/提升它的一个版本并在你的包中清楚地引用。

另一个技巧是使用 getFromNamespace():

fun <- utils::getFromNamespace("fun", "pkg")

::: 相比的唯一优势是您不会获得任何 NOTE,并且在 CRAN 上是允许的。当然,这不是好的做法,因为 pkg 中的隐藏更改可能会破坏您的包。

注意: 对于 roxygen2,您必须将 utils 包添加到 DESCRIPTION 文件的 Imports 字段以满足 CRAN 的要求。或者,您可以手动将其放入 NAMESPACE