由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - R package的一个问题是随意性,过于灵活
相关主题
推荐文章:Execution in the Kingdom of Nouns突然发现现在很反感malloc了
data.table谁用过? 有那么神吗?这些语言开发大型软件的可能性
版上有人用Lisp么?大家用jquery写网页的水平滑动slide, css和js文件是自己写的吗?
这次Scala又被吐槽了,too complexPython vs Ruby,Django vs Rail
问一个用R抓网上数据,抓下来的和网页不一致霸哥说的没错,为了几个语法糖争论没意思
有谁懂这个: example(data.table) ; dt.tbl> DT[X, on=.(y<=foo)]C# 和 SQLite 连接问题,多谢拉
大过节的,不要吵啦,推荐本函数编程的入门书吧?50岁的码工是最有经验的 (转载)
FP的大神,帮忙看看8行代码是如何打印出x_n的?算了, 我还是把这个版Z掉吧
相关话题的讨论汇总
话题: dplyr话题: 字段名话题: group话题: df话题: sas
进入Programming版参与讨论
1 (共1页)
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
3
你终于肯承认R的毛病啦
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里也是,如果要用一个变量来代表要用的列名,有很多绕的地方。

相关主题
大过节的,不要吵啦,推荐本函数编程的入门书吧?这些语言开发大型软件的可能性
FP的大神,帮忙看看8行代码是如何打印出x_n的?大家用jquery写网页的水平滑动slide, css和js文件是自己写的吗?
突然发现现在很反感malloc了Python vs Ruby,Django vs Rail
进入Programming版参与讨论
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的思维方式比较老中
: 就事论事,得过且过

1 (共1页)
进入Programming版参与讨论
相关主题
问个排列组合的问题。。。问一个用R抓网上数据,抓下来的和网页不一致
Python Q: function pass in struct pointer, come back with data filled有谁懂这个: example(data.table) ; dt.tbl> DT[X, on=.(y<=foo)]
问一个有关ios的技术问题大过节的,不要吵啦,推荐本函数编程的入门书吧?
吵什么吵,尼玛真无聊FP的大神,帮忙看看8行代码是如何打印出x_n的?
推荐文章:Execution in the Kingdom of Nouns突然发现现在很反感malloc了
data.table谁用过? 有那么神吗?这些语言开发大型软件的可能性
版上有人用Lisp么?大家用jquery写网页的水平滑动slide, css和js文件是自己写的吗?
这次Scala又被吐槽了,too complexPython vs Ruby,Django vs Rail
相关话题的讨论汇总
话题: dplyr话题: 字段名话题: group话题: df话题: sas