如何解决使用其他包中的函数-何时使用package :: function?
在为R制作自己的程序包时,通常希望利用其他程序包中的函数。
也许它是一个像ggplot2
,dplyr
之类的绘图库或一些小众功能。
但是,当创建一个依赖于其他包中的函数的函数时,调用它们的合适方法是什么?我特别在寻找何时使用的示例
myFunction <- function(x) {
example_package::function(x)
}
或
require(example_package)
myFunction <- function(x) {
function(x)
}
我什么时候应该使用另一个?
解决方法
如果您实际上是在创建R包(而不是用于源代码,R Project或其他方法的脚本),则应该从不使用library()
或{{1} }。这不是使用require()
的替代方法。您实际上是在package::function()
和package::function()
之间进行选择,正如@Bernhard所强调的那样,如果两个或多个软件包中的名称冲突,则显式调用该软件包可确保一致性。
您需要担心是否正确定义了Description和NAMESPACE文件,而不是function()
。关于SO以及其他地方有很多关于此的文章,因此不再赘述,例如,参见here。
如果您使用require(package)
来生成程序包文档,则使用package::function()
可以为您提供帮助(它会自动生成一个正确的NAMESPACE文件。
双冒号::
在少数情况下具有明显的优势,当两个软件包使用相同的函数名时。有一个函数psych::alpha
用于计算Cronbach的alpha值,以衡量内部一致性,还有一个函数scales::alpha
用于修改颜色透明度。例子不多,但又有例子。 dplyr
甚至掩盖了stats
和base
包中的功能! (tidyverse继续在我们的命名空间中生成越来越多的条目。如果您使用dyplr
,您将不知道,您今天使用的base
函数是否会被{{ 1}},从而在将来导致您的程序包出现意外的运行时间问题。)
如果使用dplyr
变体,那么所有这些都没有问题。如果在您的包裹中打开的最后一个包裹是您要的那个包裹,那么所有这些都不成问题。
::
(或require
)变体导致整体代码更短,很明显,在代码中的什么时间和位置,没有可用软件包的问题将导致错误,并且因此变得可见。
总的来说,两者都运作良好,您可以自由选择,其中哪些公认的细微差异对您来说似乎更为重要。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。