【发布时间】:2016-08-13 06:41:01
【问题描述】:
我注意到 SO 上的一些答案包含使用 pkg::name 其中名称通常是一个函数。
这与library(pkg); ... name() 或require(pkg); ... name() 相比有什么优势? R 帮助,(help("::")) 说
对于包 pkg,pkg::name 返回命名空间 pkg 中导出的变量名称的值,... 如果在调用之前没有加载命名空间,则将加载该命名空间,但该包不会附加到搜索路径。
这是否意味着在python中没有加载整个包的额外内存损失(即,它等效于import <function> from <package>)使用该函数?或者它只是一种告诉 R 在可能存在歧义时使用这个包中的函数的方法?
我的问题与在 Rscript 中或直接在控制台中使用 :: 有关,因此不是链接问题的重复,因为该问题中的 OP 正在讨论使用 stats4 包中的函数一个包开发项目。另一方面,这篇文章中似乎有一些答案可以阐明我的问题。感谢您的链接。 (注意下面关于 Meta 的讨论:duplicates flag)
【问题讨论】:
-
@kristang 我的问题实际上并不是链接问题的重复,因为该问题中的 OP 正在讨论在包开发项目期间使用
stats4包中的函数。另一方面,这篇文章中似乎有一些答案可以阐明我的问题。感谢您的链接。 -
使用
::将消除多个包中具有相同名称的函数的歧义,而通常会使用最近加载的包中的函数。例如,library(pryr); library(data.table):“以下对象被‘package:data.table’屏蔽:地址”。在这种情况下,这并不重要,因为这些包中的每一个提供的address函数本质上是相同的,但情况并非总是如此。library(pkg)与pkg::fun之间的任何内存或性能差异很可能是微不足道的。 -
该主题的相关discussion。
-
@nrussell 那么消除歧义是
::的唯一用途吗?是否有像 python 示例中那样的内存节省组件,或者使用pkg::name将整个包加载到内存中。感谢您的链接。我去看看。 -
我从未听说有人使用
::来最小化 R 的内存占用。原因通常是消除歧义和代码清晰。
标签: r namespaces