dplyr:group_by和group_by_函数之间的区别是什么?

时间:2015-02-23 04:46:54

标签: r dplyr

我无法弄清楚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"  

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

由于

1 个答案:

答案 0 :(得分:19)

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(),summarize(),arrange(),   select()和group_by()。 NSE不仅对你节省打字很重要,   但对于数据库后端,是什么使得翻译您的   R代码到SQL。然而,虽然NSE非常适合交互式使用   难以编程。这个小插图描述了你如何选择退出   在dplyr中的NSE,而是仅依赖于SE(以及一点点   引用)。

     

...

     

使用NSE的dplyr中的每个函数也都有一个使用SE的版本。   有一个一致的命名方案:SE是带有_ on的NSE名称   结束。例如,summary()的SE版本是summarise_(),   arrange()的SE版本是arrange_()。这些功能非常有效   与他们的NSE表兄弟类似,但输入必须“引用”