r语言 - 使用其他包中的函数 - 何时使用 package::function?



在为 R 制作自己的包时,通常希望使用来自不同包的函数。 也许它是一个绘图库,如ggplot2dplyr,或者一些利基函数。

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

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

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

我什么时候应该使用一个而不是另一个?

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

与其require(package),不如说是正确定义描述和命名空间文件。在SO和其他地方有很多关于此的帖子,因此不会详细介绍,例如请参阅此处。

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

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

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

require(或library)变体导致整体代码较短,很明显,在代码中的什么时间和地点,不可用包的问题将导致错误,从而变得可见。

一般来说,两者都工作得很好,你可以自由选择,这些公认的小差异中的哪一个对你来说似乎更重要。

最新更新