d******a 发帖数: 32122 | 1 比如dplyr,允许进行SQL 类的操作
但是对于字段名,直接要给出
比如
df_ret=df %>% group_by(name, work_year)) %>% summarise ...
这里,name 和 work_year都是字段名
在其他语言里,字段名需要引号,dplyr不用,实际是不能用,你用了还不行
但是假如我写了个过程,参数(f1)将作为字段名,就没法这么用了。google的结果,是
group_by 要改成 group_by_
library(dplyr)
get_f1 = function(f1, df){
df_ret=df %>% group_by_(.dots=c(f1, 'work_year')) %>% summarise ...
return(df_ret)
}
我猜,最初版本没有group_by_, 有人提出了,没法在原有框架满足,才新加的。其实
最初的版本要求字段名用引号比什么都强 |
w********m 发帖数: 1137 | 2 这个算是stackoverflow oriented programming吧。
用个hash table就能解决的问题,改用dsl解决,比较不爽。 |
m*****n 发帖数: 3575 | |
d******c 发帖数: 2407 | 4 应该不是group_by自己的问题,而是R传统里很多地方有把名字直接用不加引号的习惯
,然后要用变量的时候肯定得用个不同语法。
如果说直接用的case有80%,那算是为了这80%的方便,把剩下的20%搞的费劲一些。如
果你用其他情况实际更多,那就麻烦更多一些。
传统R里有时用quote/get那一套来解决,依靠non-standard evaluation,那个更麻烦
,也容易出问题
http://adv-r.had.co.nz/Computing-on-the-language.html
dplyr用不同的函数,算是另一种路子。
data.table里也是,如果要用一个变量来代表要用的列名,有很多绕的地方。
【在 d******a 的大作中提到】 : 比如dplyr,允许进行SQL 类的操作 : 但是对于字段名,直接要给出 : 比如 : df_ret=df %>% group_by(name, work_year)) %>% summarise ... : 这里,name 和 work_year都是字段名 : 在其他语言里,字段名需要引号,dplyr不用,实际是不能用,你用了还不行 : 但是假如我写了个过程,参数(f1)将作为字段名,就没法这么用了。google的结果,是 : group_by 要改成 group_by_ : library(dplyr) : get_f1 = function(f1, df){
|
m******r 发帖数: 1033 | 5 请问什么叫做dsl, google了一下没找到。
【在 w********m 的大作中提到】 : 这个算是stackoverflow oriented programming吧。 : 用个hash table就能解决的问题,改用dsl解决,比较不爽。
|
r*g 发帖数: 3159 | 6 domain specific language.
【在 m******r 的大作中提到】 : 请问什么叫做dsl, google了一下没找到。
|
m******r 发帖数: 1033 | 7 R的问题既不是‘灵活性’, 也不是‘随意性‘, 而是‘历史局限性’和‘手工作坊
’特性。
灵活性是褒义词,一个东西可以这么玩,也可以那么玩。 R是整相反。 一个变量用
group_by, 两个变量用group_by_, 混合变量没准再想另外个法子。
‘手工作坊’特性不难理解,hadley wickham 写dplyr, max写caret, julia写
textmining, mat写data.table,各有各的写法。 几个大厨做的饭,非把他放在一起吃
,不知道是个什么味儿。
‘历史局限性‘说的是R本来是处理函数的语言, 而不是处理数据的语言,主要是这个
戴耳环的新西兰人hadly wickham花了好几年功夫写dplyr, plyr专门让它处理数据。
这里面目的性也很强,首先,一般人不会搞什么算法,也不会和函数打交道,所以也没
必要用R. 大部分人还是先要和数据打交道,既然wickham 为rstudio工作,那么增强R
处理数据的功能,是打开市场的好办法。
第二,把一个专门处理函数的语言折腾成一个能处理数据的语言, 本来就不容易, 没
想wichham野心更大,既要满足市场部大妈写类似sql的需要,又要满足楼主和我这样高
端编程人才的需要,所以dplyr这款产品就是四不像,居然能想出group_by 和group_by
_ 这种写法来区分标准计算(standard evaluation ) 和非标准计算(NSE)。
回到楼主的问题, wickham原本设计dplyr就没有想到楼主吃饱撑的会这么用(按我说
这是极其普遍的用法,把两个factor串起来么,正常人都想得到),2014年一月在
stackoverflow回答别人问题时说 我要增加这么个功能,语法大概这样,不过请你们等
一等啊【2】。 可笑的是到了2017年 wichham 联合我上面提到的几个大厨推出所谓
tidyverse, 声明SE是'肤浅的'(superfluous), 没必要的, 要降级使用deprecate。
[1]
这就好比楼主要买一辆车,既可以买车场造的车(商业软件),也可以买wickham在后
院改装的车, 改装车不要钱啊,而且wickham还宣称他的改装车既可以用来买菜,又能
飙车;既有摩托车的灵活性,随意性,又有豪华车的各种配置, 函数式编程,不可变
状态, etc; 既有标准操作,又有非标准操作。 现在看来还有降级使用的标准操作。
不管你信不信, 我是信了。
[1]https://dplyr.tidyverse.org/reference/se-deprecated.html
[2]https://stackoverflow.com/questions/21208801/group-by-multiple-columns-in
-dplyr-using-string-vector-input/ |
m*****n 发帖数: 3575 | 8 是编程者的精神洁癖不够
像Python的龟叔的洁癖很强
就强行把语法都统一了
而且一个语法在任何情境下都通用
这没有精神洁癖是做不到的
R的思维方式比较老中
就事论事,得过且过
【在 m******r 的大作中提到】 : R的问题既不是‘灵活性’, 也不是‘随意性‘, 而是‘历史局限性’和‘手工作坊 : ’特性。 : 灵活性是褒义词,一个东西可以这么玩,也可以那么玩。 R是整相反。 一个变量用 : group_by, 两个变量用group_by_, 混合变量没准再想另外个法子。 : ‘手工作坊’特性不难理解,hadley wickham 写dplyr, max写caret, julia写 : textmining, mat写data.table,各有各的写法。 几个大厨做的饭,非把他放在一起吃 : ,不知道是个什么味儿。 : ‘历史局限性‘说的是R本来是处理函数的语言, 而不是处理数据的语言,主要是这个 : 戴耳环的新西兰人hadly wickham花了好几年功夫写dplyr, plyr专门让它处理数据。 : 这里面目的性也很强,首先,一般人不会搞什么算法,也不会和函数打交道,所以也没
|
l****u 发帖数: 1764 | 9 是啊 python没有在python 2上面修修补补凑合,还真搞了个全新的python 3出来,而
且现在看来这决定还真挺正确的
【在 m*****n 的大作中提到】 : 是编程者的精神洁癖不够 : 像Python的龟叔的洁癖很强 : 就强行把语法都统一了 : 而且一个语法在任何情境下都通用 : 这没有精神洁癖是做不到的 : R的思维方式比较老中 : 就事论事,得过且过
|
d******a 发帖数: 32122 | 10 如果是20岁左右的小年轻,有的是时间折腾
但是岁数大了以后,就喜欢一种方法适合所有情况,即便在很多情况下不是最优的
【在 d******c 的大作中提到】 : 应该不是group_by自己的问题,而是R传统里很多地方有把名字直接用不加引号的习惯 : ,然后要用变量的时候肯定得用个不同语法。 : 如果说直接用的case有80%,那算是为了这80%的方便,把剩下的20%搞的费劲一些。如 : 果你用其他情况实际更多,那就麻烦更多一些。 : 传统R里有时用quote/get那一套来解决,依靠non-standard evaluation,那个更麻烦 : ,也容易出问题 : http://adv-r.had.co.nz/Computing-on-the-language.html : dplyr用不同的函数,算是另一种路子。 : data.table里也是,如果要用一个变量来代表要用的列名,有很多绕的地方。
|
|
|
m******r 发帖数: 1033 | 11 不在于年龄, 也不在于性别。
所谓数据分析,是各类分析中末流的末流。 处理数据的语言,也应该是末流中的末流。
一门好的处理数据的语言,我认为应该像sql, 正常智商的人半天入门,一周掌握,几
个月精通。像dplyr这种, 吭哧吭哧,发明了无数奇技淫巧,引入了一整套函数式编程
的江湖黑话,连楼主如此简单的用户需求, 都要绕这么大个圈, 确实令人对dplyr丧
失信心。
楼主的需求, 在sql里,无非就是group by A, 和group by A, B。 |
w********m 发帖数: 1137 | 12 我是统计转马公的低端程序员。
统计语言有很大的问题。
像R,SAS还有matlab,总觉得用户写不了循环。
什么事情都得用个轮子或者dsl。
其实aggregation这类,就是循环一下加个hash table就解决的问题。
很简单的算法,然而,必须去查他们的document,或者stackoverflow。
这样的编程会很累,不会有那种一气呵成的击杀感。
对编程的兴趣是个打击。久而久之,就搞得很苦逼了。
【在 m******r 的大作中提到】 : 请问什么叫做dsl, google了一下没找到。
|
m*****n 发帖数: 3575 | 13 是的,语法没有通用性。
这里用着不错下回那里一用就崩溃,是心理暴击。
编程最讨厌的是语言自己有缺陷,类似R这种。
但是好像编程都会遇到,尤其是和硬件打交道的。
【在 w********m 的大作中提到】 : 我是统计转马公的低端程序员。 : 统计语言有很大的问题。 : 像R,SAS还有matlab,总觉得用户写不了循环。 : 什么事情都得用个轮子或者dsl。 : 其实aggregation这类,就是循环一下加个hash table就解决的问题。 : 很简单的算法,然而,必须去查他们的document,或者stackoverflow。 : 这样的编程会很累,不会有那种一气呵成的击杀感。 : 对编程的兴趣是个打击。久而久之,就搞得很苦逼了。
|
m******r 发帖数: 1033 | 14 所谓数据分析, 老土管他叫‘熟橘分洗’,很形象, 大部分人做的,无非是根据业务
逻辑,对数据在不同层次上( 楼主题目中的group_by)进行aggregate, 然后对剩下的
变量请小学生做个加减乘除。。
这么简单的事儿 不知道为什么hadley 好多年从plyr改到dplyr改到tidyverse 引入各
种奇异的语法, pipe operator, mutate, underscore version of verbs, etc 结果
却像一架庞大的官僚机器, 机构臃肿 部门众多,却不能有效解决一个像楼主问的简单
问题。
【在 w********m 的大作中提到】 : 我是统计转马公的低端程序员。 : 统计语言有很大的问题。 : 像R,SAS还有matlab,总觉得用户写不了循环。 : 什么事情都得用个轮子或者dsl。 : 其实aggregation这类,就是循环一下加个hash table就解决的问题。 : 很简单的算法,然而,必须去查他们的document,或者stackoverflow。 : 这样的编程会很累,不会有那种一气呵成的击杀感。 : 对编程的兴趣是个打击。久而久之,就搞得很苦逼了。
|
D******n 发帖数: 2836 | 15 好久沒用R,之前都是base裡面最簡單的辦法處理數據。
好像現在dplyr是主流,就看了一下,本來還覺得挺好的,後來發現這些問題,也頭都
大,搞的那麼噁心,還真的不如用SAS了。。。
【在 m******r 的大作中提到】 : 所谓数据分析, 老土管他叫‘熟橘分洗’,很形象, 大部分人做的,无非是根据业务 : 逻辑,对数据在不同层次上( 楼主题目中的group_by)进行aggregate, 然后对剩下的 : 变量请小学生做个加减乘除。。 : 这么简单的事儿 不知道为什么hadley 好多年从plyr改到dplyr改到tidyverse 引入各 : 种奇异的语法, pipe operator, mutate, underscore version of verbs, etc 结果 : 却像一架庞大的官僚机器, 机构臃肿 部门众多,却不能有效解决一个像楼主问的简单 : 问题。
|
m******r 发帖数: 1033 | 16 hadley真应该学学sas的均值过程。 一个均值过程,无论你有多少factor,多少变量,
不管你要求多少统计值, 都是一网打尽不超过5,6行代码。 一本均值过程手册,不知
道超不超过200~300页,一天就看完了。
sas里面特有的by_group processing只要一行代码,by xxx后面随便你放多少factor.
概念上也是一脉相承, 完全可以用在其他过程步。
【在 D******n 的大作中提到】 : 好久沒用R,之前都是base裡面最簡單的辦法處理數據。 : 好像現在dplyr是主流,就看了一下,本來還覺得挺好的,後來發現這些問題,也頭都 : 大,搞的那麼噁心,還真的不如用SAS了。。。
|
D******n 发帖数: 2836 | 17 是啊,不得不說SAS對於最基本的數據處理已經是爐火純青了。
經過這麼多年的改進,SAS的proc都會比較乾淨,語法規整。
相比之下走出base R, R的各種package隨意來,。。。。
SAS基本上row wise的操作已經沒什麼問題
column wise就套用不同的procs
壞處就是複雜一點的數據邏輯不能直接從邏輯轉換為code,而是要套變成SAS的這種
style
.
【在 m******r 的大作中提到】 : hadley真应该学学sas的均值过程。 一个均值过程,无论你有多少factor,多少变量, : 不管你要求多少统计值, 都是一网打尽不超过5,6行代码。 一本均值过程手册,不知 : 道超不超过200~300页,一天就看完了。 : sas里面特有的by_group processing只要一行代码,by xxx后面随便你放多少factor. : 概念上也是一脉相承, 完全可以用在其他过程步。
|
a***c 发帖数: 1 | 18 Hadley就像很多gay一样,聪明滑头奇技淫巧,反应在语言里也是,不入流。龟叔比他
强的不是一个档次。
【在 m*****n 的大作中提到】 : 是编程者的精神洁癖不够 : 像Python的龟叔的洁癖很强 : 就强行把语法都统一了 : 而且一个语法在任何情境下都通用 : 这没有精神洁癖是做不到的 : R的思维方式比较老中 : 就事论事,得过且过
|