做什么 .(点)和%(百分比)是指R?

zip*_*ipp 15 r nomenclature dplyr data.table

我的问题可能听起来很愚蠢,但我注意到.%经常使用R并坦率地说我不知道​​为什么使用它.

我已经看到了dplyr(去这里作为例子)和data.table(即.SD),但我相信它也必须在其他地方使用.

因此,我的问题是:

  • 什么.意思?它是某种R编码最佳实践术语吗?(即_functionName通常用于javascript表示它是私人功能).如果是,那么规则是什么?
  • 对于同样的问题%,这也常常R中使用(即%in%,%>%,...).

我的猜测始终一直是.%是一种方便的方式来快速调用功能,但方式data.table使用.不遵循这个逻辑,这混淆了我.

MrF*_*ick 25

.在R中没有固有的/神奇的含义.它只是你可以在符号名称中使用的另一个角色.但是因为键入它很方便,所以R中的某些函数和约定赋予它特殊的含义.这里只是几个

  • .用于查找S3泛型方法实现.例如,如果您调用类似于plot对象的泛型函数lm作为第一个参数,那么它将查找名为的函数plot.lm,如果找到,则调用该函数.
  • 通常.在公式中表示"所有其他变量",例如lm(y~., data=dd)将对ydata.frame中的所有其他变量进行回归dd.
  • dplyr使用它作为一个特殊的变量名来指示当前的data.frame方法do().他们可以很容易地选择使用的变量名X,而不是
  • 像功能bquote的使用.()作为一个特殊的功能,以逃避表达式变量
  • 以句点开头的变量被视为"隐藏",ls()除非您调用ls(all.names=TRUE)(类似于UNIX文件系统行为),否则不会显示

但是,您也可以只定义一个名为的变量my.awesome.variable<-42,它将像任何其他变量一样工作.

A %本身并不意味着什么特别,但R允许您%<something>%使用两个百分号在表单中定义自己的中缀运算符.如果你定义

`%myfun%` <- function(a,b) {
    a*3-b*2
}
Run Code Online (Sandbox Code Playgroud)

你可以称之为

5 %myfun% 2
# [1] 11
Run Code Online (Sandbox Code Playgroud)

  • `.`的其他一些用法:在模型公式中,例如,`lm(var~.,data = df)`句号表示"除`var`之外的`df`中的所有其他变量." 在`dplyr`中,它被用作"代词"来指代当前数据框(例如,参见[此处](http://blog.rstudio.org/2014/05/21/dplyr-0-2/)) ). (8认同)
  • 此外,变量之前的`.`使其"不可见":如果你执行`.a <-1:3`然后`ls()`,则不会列出`.a`. (7认同)

Mic*_*ico 12

MrFlick的答案不包括.in 的用法data.table;

data.table,.(基本上)是一个别名list,所以任何*调用[.data.table接受a list也可以传递一个包装的对象.().

所以以下是等价的:

DT[ , .(x, y)]
DT[ , list(x, y)]
Run Code Online (Sandbox Code Playgroud)

嗯,不太好.任何在j论证中的用法,是的; 其他地方正在进行中,请看这里.