我想知道::
和:::
运算符的功能在R中是如何不同的。
然而,我无法弄清楚这些运营商的名称是什么,因此谷歌或搜索引擎优化搜索并未证明有用。当我在R中尝试?::
时,我也会收到错误。
因此...
所谓的::
和:::
运营商是什么?
::
和:::
有何不同? (即完全各自做什么)?
答案 0 :(得分:8)
事实证明,有一种独特的方式来访问运营商的帮助信息,例如这些冒号:在运营商周围添加引号。 [例如,?'::'
或help(":::")
]
问题的答案可以在“Double Colon和Triple Colon Operators”的帮助页面找到(参见here)。
对于包pkg,pkg :: name返回命名空间pkg中导出的变量名的值,而pkg ::: name返回 internal 的值变量名。如果在调用之前未加载包命名空间,则将加载包命名空间,但包不会附加到搜索路径。
通过检查每个代码可以看出差异:
> `::`
function (pkg, name)
{
pkg <- as.character(substitute(pkg))
name <- as.character(substitute(name))
getExportedValue(pkg, name)
}
<bytecode: 0x00000000136e2ae8>
<environment: namespace:base>
> `:::`
function (pkg, name)
{
pkg <- as.character(substitute(pkg))
name <- as.character(substitute(name))
get(name, envir = asNamespace(pkg), inherits = FALSE)
}
<bytecode: 0x0000000013482f50>
<environment: namespace:base>
:: 调用getExportedValue(pkg, name)
,在包名称空间中返回导出变量name
的值。
::: 调用get(name, envir = asNamespace(pkg), inherits = FALSE)
,在包的Namespace环境中搜索对象name
,返回内部的值变量name
。
那么,命名空间究竟是什么?
这个site很好地解释了R中命名空间的概念。重要的是:
顾名思义,名称空间为“名称”提供了“空格”。它们提供了查找与名称关联的对象的值的上下文。