【问题标题】:R: How do I make my package use another package?R:如何让我的包使用另一个包?
【发布时间】:2016-04-28 02:32:07
【问题描述】:

这是一个非常简单的问题。 我正在扩展某人的包裹。它目前使用包 A、B,它们在DESCRIPTION 文件中列出。

如果我需要包 C 中的函数 - 将包添加到依赖项中 - 我是否只需将包添加到说明文件中就可以了?进入哪个部分 - 依赖或进口?还有其他步骤吗?一旦我的代码需要使用包 C 函数,我是否需要使用前缀 C::functionInC()?

【问题讨论】:

  • 通常的参考:cran.r-project.org/doc/manuals/r-release/R-exts.html 看起来 Depends 不鼓励使用 Imports,看看第一部分。
  • 我在 Imports 中有它,只有在将它放入 Depends 之后它才起作用。
  • 使用 Depends 而不是 Imports 使其“工作”这一事实可能会产生误导。在描述文件的 Imports 部分中列出它仅意味着它将被安装,而不是附加。 Imports 可能仍然是最好的方法,但我认为您还需要在 NAMESPACE 文件中指定导入。
  • 这是一个足够基本/基本的问题,您只需 read a bit 了解如何实际制作包。

标签: r package


【解决方案1】:

简答: 将 C 添加到 Imports:并且在使用 C 函数时,使用双分号前缀。

更长的上下文:

以下链接提供以下建议 http://r-pkgs.had.co.nz/namespace.html#imports

R 函数

如果您只使用另一个包中的几个函数,我的建议是在说明文件的 Imports: 字段中记下包名称,并使用 :: 显式调用函数,例如 pkg::fun ()。

如果你重复使用函数,你可以通过 @importFrom pgk fun 导入函数来避免 ::。这也有一点性能优势,因为 :: 增加了大约 5 µs 的函数评估时间。

或者,如果您重复使用另一个包中的许多功能,您可以使用 @import 包导入所有功能。这是最不推荐的解决方案,因为它使您的代码更难阅读(您无法分辨函数来自何处),并且如果您 @import 许多包,它会增加函数名称冲突的可能性。

【讨论】:

  • 如果导入包中的函数是管道(%>%)符号怎么办?您是否仍然以某种方式为其添加前缀,或者认为不添加也可以?
  • @stevec 试试 usethis 包。有一个特定的功能可以导入管道。 usethis::use_pipe()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多