我的问题可能听起来很愚蠢,但我注意到.
和%
经常在R
中使用,坦率地说,我真的不知道为什么要使用它。
我已经在dplyr
(在这里举个例子(和data.table
(即 .SD
(,但我相信它也必须在其他地方使用。
因此,我的问题是:
.
是什么意思?它是某种R
编码最佳实践命名法吗?(即_functionName
经常在javascript
中用于表示它是一个私有函数(。如果是,规则是什么?- 同样的问题
%
,也经常用于 R(即%in%
,%>%
,...(。
我的猜测一直是.
和%
是快速调用函数的便捷方法,但data.table
使用.
的方式不遵循这种逻辑,这让我感到困惑。
.
在R中没有固有/神奇的含义。它只是可以在符号名称中使用的另一个字符。但是因为它打字非常方便,所以它被 R 中的某些函数和约定赋予了特殊含义。这里只是几个
-
.
用于查找 S3 泛型方法实现。例如,如果您调用像plot
这样的泛型函数,并将类lm
的对象作为第一个参数,那么它将查找名为plot.lm
的函数,如果找到,则调用该函数。 - 通常
.
公式中表示"所有其他变量",例如lm(y~., data=dd)
将在 data.framedd
中的所有其他变量上回归y
。 - 像
dplyr
这样的库使用它作为特殊的变量名称来指示do()
等方法的当前 data.frame 。他们可以很容易地选择使用变量名X
- 像
bquote
这样的函数使用.()
作为特殊函数来转义表达式中的变量 - 以句点开头的变量被视为"隐藏",除非您调用
ls(all.names=TRUE)
,否则不会显示ls()
(类似于 UNIX 文件系统行为(
但是,您也可以只定义一个名为 my.awesome.variable<-42
的变量,它将像任何其他变量一样工作。
%
本身并不意味着任何特殊之处,但 R 允许您使用两个百分号以 %<something>%
的形式定义自己的中缀运算符。如果定义
`%myfun%` <- function(a,b) {
a*3-b*2
}
你可以这样称呼它
5 %myfun% 2
# [1] 11
Flick先生的回答不包括.
在data.table
中的用法;
在data.table
中,.
(本质上(是list
的别名,所以任何对接受list
的[.data.table
的调用也可以传递一个用.()
包装的对象。
因此,以下内容是等效的:
DT[ , .(x, y)]
DT[ , list(x, y)]
*嗯,不完全是。 J 参数中的任何用法,是的; 其他地方正在进行中,请参阅此处。