我无法弄清楚group_by_()函数的基于下划线的函数是什么。

在group_by帮助中:

by_cyl <- group_by(mtcars, cyl)
summarise(by_cyl, mean(disp), mean(hp))


产生预期的:

Source: local data frame [3 x 3]
    cyl mean(disp)  mean(hp)
1   4   105.1364  82.63636
2   6   183.3143 122.28571
3   8   353.1000 209.21429


但是这个:

by_cyl <- group_by_(mtcars, cyl)


产生一个错误:

"Error in as.lazy_dots(list(...)) : object 'cyl' not found"


所以我的问题是下划线版本有什么作用?而且,在什么情况下我想使用它而不是“常规”的?

谢谢

最佳答案

dplyr非标准评估插图可帮助您:http://cran.r-project.org/web/packages/dplyr/vignettes/nse.html
注意:上面的链接现在已过期,但是可以在github页面上找到相同的信息。
https://github.com/tidyverse/dplyr/blob/34423af89703b0772d59edcd0f3485295b629ab0/vignettes/nse.Rmd

Dplyr在所有最重要的方面均使用非标准评估(NSE)
单表动词:filter(),mutate(),summarise(),ranging(),
select()和group_by()。 NSE非常重要,不仅可以节省您的输入,
但是对于数据库后端,是什么使得翻译您的
R代码转SQL。但是,尽管NSE非常适合互动使用,
很难编程。此小插图介绍了如何选择退出
dplyr中的NSE,而是仅依赖SE(以及一些
报价)。
...
dplyr中使用NSE的每个函数还具有使用SE的版本。
有一个一致的命名方案:SE是NSE名称,带有_
结束。例如,summarise()的SE版本是summarise_(),
SE()的SE版本是Arrange_()。这些功能非常有效
类似于他们的NSE表亲,但输入内容必须“引用”

08-19 22:13