R 使用其他包中的函数-何时使用package::function?
在为R编写自己的包时,通常需要使用不同包中的函数。 也许它是一个绘图库,比如R 使用其他包中的函数-何时使用package::function?,r,roxygen2,R,Roxygen2,在为R编写自己的包时,通常需要使用不同包中的函数。 也许它是一个绘图库,比如ggplot2,dplyr,或者一些小功能 但是,在创建依赖于其他包中的函数的函数时,调用它们的适当方式是什么?特别是,我正在寻找何时使用的示例 myFunction双冒号变体:在两个包使用相同函数名的罕见情况下具有明显的优势。有一个函数psych::alpha计算克朗巴赫的alpha作为内部一致性的度量,还有一个函数scales::alpha修改颜色透明度。虽然例子不多,但还是有一些例子dplyr甚至屏蔽了stats和
ggplot2
,dplyr
,或者一些小功能
但是,在创建依赖于其他包中的函数的函数时,调用它们的适当方式是什么?特别是,我正在寻找何时使用的示例
myFunction双冒号变体:
在两个包使用相同函数名的罕见情况下具有明显的优势。有一个函数psych::alpha
计算克朗巴赫的alpha作为内部一致性的度量,还有一个函数scales::alpha
修改颜色透明度。虽然例子不多,但还是有一些例子dplyr
甚至屏蔽了stats
和base
包中的函数!(tidyverse在我们的名称空间中继续产生越来越多的条目。如果您使用dyplr
,您不知道,您今天使用的base
函数是否会被dplyr
的未来版本所掩盖,从而导致您的包在未来出现意外的运行时问题。)
如果使用:
变量,所有这些都没有问题。如果您的包中最后打开的包就是您所指的包,那么所有这些都不是问题
require
(或library
)变体会导致代码总体较短,很明显,在代码中的什么时间和位置,不可用的包问题会导致错误,从而变得可见
一般来说,这两种方法都能很好地工作,您可以自由地选择,其中哪一个对您来说是公认的小差异显得更重要。如果您实际创建的是一个R包(与源代码脚本、R项目或其他方法相反),您永远不应该使用库()
或require()
。这不是使用package::function()
的替代方法。本质上,您是在package::function()
和function()
之间进行选择,正如@Bernhard所强调的那样,如果两个或多个包中存在名称冲突,显式调用包可确保一致性
您需要担心如何正确定义描述和名称空间文件,而不是require(package)
。在某处和其他地方都有很多关于这方面的帖子,所以不会详细讨论,例如
如果您正在使用roxygen2
生成软件包文档,则使用package::function()
可以帮助您完成上述操作(它将自动生成正确的命名空间文件)