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

hac*_*ckR 11 r dplyr

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

来自group_by帮助:

by_cyl <- group_by(mtcars, cyl)  
summarise(by_cyl, mean(disp), mean(hp))  
Run Code Online (Sandbox Code Playgroud)

产生预期:

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
Run Code Online (Sandbox Code Playgroud)

但是这个:

by_cyl <- group_by_(mtcars, cyl)  
Run Code Online (Sandbox Code Playgroud)

产生错误:

"Error in as.lazy_dots(list(...)) : object 'cyl' not found"  
Run Code Online (Sandbox Code Playgroud)

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

谢谢

r.b*_*bot 20

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(以及一些引用).

...

dplyr中使用NSE的每个函数也都有一个使用SE的版本.有一个一致的命名方案:SE是带有_的NSE名称.例如,summary()的SE版本是summarise_(),arrange()的SE版本是arrange_().这些函数的工作方式与它们的NSE堂兄弟非常相似,但输入必须"引用"

  • 作为一个python用户,阅读所有这些R编码的答案让我很困惑.为什么R程序员在StackOverflow上1.没有用明确的例子来解释(在python答案中看到很多).2.提供文档链接,而不是简单地解释代码.我已经看过很多了.任何人都可以纠正我为什么看到这种趋势?我确实看到一些R用户试图遵循好方法,但他们只覆盖我在StackOverflow上遇到的主要问题和答案的1-2%.谢谢. (4认同)