R:你叫什么叫::和:::运算符,它们有什么不同?

the*_*ist 1 terminology r operators

我想知道:::::运算符的函数在R中是如何不同的.

但是,我无法弄清楚这些运营商的名称是什么,所以google或SO搜索没有证明是有用的.我?::在R中尝试时也遇到错误

所以...

  1. 什么是:::::运营商叫?

  2. 怎么做:::::不同?(即,每个人究竟做了什么)?

the*_*ist 9

事实证明,有一种独特的方式来访问运营商的帮助信息,例如这些冒号:在运营商周围添加引号.[例如,?'::'help(":::")].

  • 此外,代替引号,反向标记(即,`)也起作用.

双结肠操作员和三重结肠操作员

问题的答案可以在"Double Colon和Triple Colon Operators"的帮助页面上找到(见这里).

对于包pkg,pkg :: name返回命名空间pkg中导出的变量名的值,而pkg ::: name返回内部变量名的值.如果在调用之前未加载包命名空间,则将加载包命名空间,但包不会附加到搜索路径.

通过检查每个代码可以看出差异:

> `::`
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>
Run Code Online (Sandbox Code Playgroud)

:: calls getExportedValue(pkg, name),返回name包名称空间中导出变量的值.

:::调用get(name, envir = asNamespace(pkg), inherits = FALSE),在name包的Namespace环境中搜索对象,并返回内部变量的值name.


那么,命名空间到底是什么?

站点很好地解释了R中命名空间的概念.重要的是:

顾名思义,名称空间为"名称"提供了"空格".它们提供了查找与名称关联的对象的值的上下文.

  • 这意味着你可以做一些荒谬的事情,比如`\`:: \`("stats","sd")(1:5)`这相当于`sd(1:5)` (5认同)