微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用其他包中的函数-何时使用package :: function?

在为R制作自己的程序包时,通常希望利用其他程序包中的函数。 也许它是一个ggplot2dplyr之类的绘图库或一些小众功能

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

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甚至掩盖了statsbase包中的功能! (tidyverse继续在我们的命名空间中生成越来越多的条目。如果您使用dyplr,您将不知道,您今天使用的base函数是否会被{{ 1}},从而在将来导致您的程序包出现意外的运行时间问题。)

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

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

总的来说,两者都运作良好,您可以自由选择,其中哪些公认的细微差异对您来说似乎更为重要。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。