我的问题可能听起来很愚蠢,但我注意到.
和%
经常在R
中使用,坦白说我真的不知道为什么使用它。
我在dplyr
(例如here)和data.table
(即.SD
)中看过它,但我确信它必须在其他地方使用好。
因此,我的问题是:
.
是什么意思?它是某种R
编码最佳实践命名法吗? (即_functionName
经常在javascript
中用来表示它是私人函数。如果是,那该规则是什么?%
的同一问题,也常用于R(即%in%
,%>%
,...)。我的猜测始终是.
和%
是快速调用函数的便捷方式,但data.table
使用.
的方式不遵循此逻辑,这会让人感到困惑我
答案 0 :(得分:25)
.
在R中没有固有的/神奇的含义。它只是你可以在符号名称中使用的另一个角色。但是因为键入它很方便,所以R中的某些函数和约定赋予它特殊的含义。这里只是几个
.
用于查找S3泛型方法实现。例如,如果您调用类似plot
的泛型函数并将类lm
的对象作为第一个参数,那么它将查找名为plot.lm
的函数,如果找到,则调用该函数.
在公式中表示"所有其他变量",例如lm(y~., data=dd)
将对data.frame {{1}中的所有其他变量进行回归y
}}。dd
之类的库将其用作特殊变量名称,以指示dplyr
等方法的当前data.frame。他们可以轻松选择使用变量名称do()
代替X
这样的函数使用bquote
作为特殊函数来转义表达式中的变量.()
(类似于UNIX文件系统行为),否则不会显示ls()
但是,你也可以只定义一个名为ls(all.names=TRUE)
的变量,它就像任何其他变量一样工作。
my.awesome.variable<-42
本身并不代表任何特殊内容,但R允许您使用两个百分号来定义%
形式的中缀运算符。如果你定义
%<something>%
你可以称之为
`%myfun%` <- function(a,b) {
a*3-b*2
}
答案 1 :(得分:11)
MrFlick的回答并未涵盖.
中data.table
的使用情况;
在data.table
中,.
是(essentially)list
的别名,因此对[.data.table
的任何*调用接受list
也可以传递包含在.()
中的对象。
以下是等同的:
DT[ , .(x, y)]
DT[ , list(x, y)]
*嗯,不太好。任何在j论证中的用法,是的;其他地方正在进行中,see here。