繁体   English   中英

使用其他包中的功能 - 何时使用 package::function?

[英]Using functions from other packages - when to use package::function?

在为 R 制作自己的 package 时,通常希望使用不同 package 的功能。 也许它是一个绘图库,如ggplot2dplyr或一些小众 function。

但是,在制作依赖于其他包中的函数的 function 时,调用它们的合适方法是什么? 特别是,我正在寻找何时使用的示例

myFunction <- function(x) {
example_package::function(x)
}

或者

require(example_package)

myFunction <- function(x) {
function(x)
}

我什么时候应该使用其中一种?

如果您实际上是在创建 R package(与源脚本相反,R 项目或其他方法require() ,您应该永远不要使用library() 这不是使用package::function()的替代方法。 您实际上是在package::function()function()之间进行选择,正如@Bernhard 所强调的那样,明确调用 package 可确保两个或多个包中存在冲突名称时的一致性。

而不是require(package) ,您需要担心正确定义您的 DESCRIPTION 和 NAMESPACE 文件。 在 SO 和其他地方有很多关于此的帖子,所以不会 go 详细介绍,例如参见此处

如果您使用roxygen2生成 package 文档,则使用package::function()可以帮助解决上述问题(它将自动生成正确的 NAMESPACE 文件。

双冒号变体::在极少数情况下具有明显优势,当两个包使用相同的 function 名称时。 有一个 function psych::alpha来计算 Cronbach 的 alpha 作为内部一致性的度量,还有一个 function scales::alpha来修改颜色透明度。 没有那么多例子,但话又说回来,有例子。 dplyr甚至从statsbase package 中屏蔽功能。 (并且 tidyverse 继续在我们的命名空间中产生越来越多的条目。如果您不知道使用dyplr ,如果您今天使用的base function 将被未来版本的dplyr掩盖,从而导致您的意外运行时问题package 未来。)

如果您使用::变体,所有这些都没有问题。 如果在您的 package 中打开的最后一个 package 是您的意思,那么所有这些都不是问题。

require (或library )变体导致整体代码更短,很明显,在代码中的什么时间和位置,不可用的 package 问题将导致错误并因此变得可见。

一般来说,两者都运作良好,您可以自由选择,这些公认的微小差异对您来说似乎更重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM