怎么办.(点)和 %(百分比)在 R 中表示



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

我已经在dplyr(在这里举个例子(和data.table(即 .SD(,但我相信它也必须在其他地方使用。

因此,我的问题是:

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

我的猜测一直是.%是快速调用函数的便捷方法,但data.table使用.的方式不遵循这种逻辑,这让我感到困惑。

.

R中没有固有/神奇的含义。它只是可以在符号名称中使用的另一个字符。但是因为它打字非常方便,所以它被 R 中的某些函数和约定赋予了特殊含义。这里只是几个

  • .用于查找 S3 泛型方法实现。例如,如果您调用像 plot 这样的泛型函数,并将类 lm 的对象作为第一个参数,那么它将查找名为 plot.lm 的函数,如果找到,则调用该函数。
  • 通常.公式中表示"所有其他变量",例如lm(y~., data=dd)将在 data.frame dd 中的所有其他变量上回归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 参数中的任何用法,是的; 其他地方正在进行中,请参阅此处。

相关内容

最新更新