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

时间:2014-12-19 05:54:05

标签: r data.table dplyr nomenclature

我的问题可能听起来很愚蠢,但我注意到.%经常在R中使用,坦白说我真的不知道为什么使用它。

我在dplyr(例如here)和data.table(即.SD)中看过它,但我确信它必须在其他地方使用好。

因此,我的问题是:

  • .是什么意思?它是某种R编码最佳实践命名法吗? (即_functionName经常在javascript中用来表示它是私人函数。如果是,那该规则是什么?
  • %的同一问题,也常用于R(即%in%%>%,...)。

我的猜测始终是.%是快速调用函数的便捷方式,但data.table使用.的方式不遵循此逻辑,这会让人感到困惑我

2 个答案:

答案 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中,.是(essentiallylist的别名,因此对[.data.table的任何*调用接受list也可以传递包含在.()中的对象。

以下是等同的:

DT[ , .(x, y)]
DT[ , list(x, y)]

*嗯,不太好。任何在j论证中的用法,是的;其他地方正在进行中,see here