Redian新闻
>
R package的一个问题是随意性,过于灵活
avatar
R package的一个问题是随意性,过于灵活# Programming - 葵花宝典
w*y
1
感觉主要不是沙发的问题,puppy的最终目的是扒窗台。 这怎么correct啊?
avatar
d*a
2
比如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_, 有人提出了,没法在原有框架满足,才新加的。其实
最初的版本要求字段名用引号比什么都强
avatar
m*h
3
why not?

【在 w***y 的大作中提到】
: 感觉主要不是沙发的问题,puppy的最终目的是扒窗台。 这怎么correct啊?
avatar
w*m
4
这个算是stackoverflow oriented programming吧。
用个hash table就能解决的问题,改用dsl解决,比较不爽。
avatar
w*y
5
哦 那可以他随便爬么? 因为他一边爬一边哭嗥,我看着怪不合适的, 想起marley
and me,怕怕呀。。。。。
avatar
m*n
6
你终于肯承认R的毛病啦
avatar
m*h
7
It's up to you. If you don't care, let him be. If you don't like it, stop
him from beginning.

【在 w***y 的大作中提到】
: 哦 那可以他随便爬么? 因为他一边爬一边哭嗥,我看着怪不合适的, 想起marley
: and me,怕怕呀。。。。。

avatar
d*c
8
应该不是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){

avatar
q*u
9
yep, it's just that simple

【在 m***h 的大作中提到】
: It's up to you. If you don't care, let him be. If you don't like it, stop
: him from beginning.

avatar
m*r
10
请问什么叫做dsl, google了一下没找到。

【在 w********m 的大作中提到】
: 这个算是stackoverflow oriented programming吧。
: 用个hash table就能解决的问题,改用dsl解决,比较不爽。

avatar
w*y
11
我就是不知道怎么stop他,我说no, ahahaha,或者把他抱走,都不灵。 他对各式玩
具也都兴趣不大,很执着的要去爬。。。。
avatar
r*g
12
domain specific language.

【在 m******r 的大作中提到】
: 请问什么叫做dsl, google了一下没找到。
avatar
q*u
13
牵着脖圈把他拉下来不就得了?

【在 w***y 的大作中提到】
: 我就是不知道怎么stop他,我说no, ahahaha,或者把他抱走,都不灵。 他对各式玩
: 具也都兴趣不大,很执着的要去爬。。。。

avatar
m*r
14
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/
avatar
m*j
15
用食物吸引走
puppy终于领回来了?
avatar
m*n
16
是编程者的精神洁癖不够
像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专门让它处理数据。
: 这里面目的性也很强,首先,一般人不会搞什么算法,也不会和函数打交道,所以也没

avatar
w*y
17
食物可以吸引走,不过他吃完就又过去了。 不过现在终于累了在睡觉
他也是个贪吃鬼, 我就直接用狗粮当treat他就很兴奋

【在 m***j 的大作中提到】
: 用食物吸引走
: puppy终于领回来了?

avatar
l*u
18
是啊 python没有在python 2上面修修补补凑合,还真搞了个全新的python 3出来,而
且现在看来这决定还真挺正确的

【在 m*****n 的大作中提到】
: 是编程者的精神洁癖不够
: 像Python的龟叔的洁癖很强
: 就强行把语法都统一了
: 而且一个语法在任何情境下都通用
: 这没有精神洁癖是做不到的
: R的思维方式比较老中
: 就事论事,得过且过

avatar
w*y
19
我顺便问一下puppy吃多少的问题。我买的natural balance的狗粮,说20lb的puppy 每
天吃1.5~2cup
我用2/3cup的喂,感觉1、2分钟之内就被风卷残云般吃掉。。。。 但是如果我每天喂3
次这么多也2cup了, puppy貌似刚刚开了喂,吃完不停啃饭盆。 我只好喂一两口红薯
、南瓜什么的意思意思。
不过这个puppy很乖,压根不知道table begging,大概不知道送到我嘴里的东西他也能
吃 哈哈
avatar
d*a
20
如果是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里也是,如果要用一个变量来代表要用的列名,有很多绕的地方。

avatar
w*y
21
起床了^_^
avatar
m*r
22
不在于年龄, 也不在于性别。
所谓数据分析,是各类分析中末流的末流。 处理数据的语言,也应该是末流中的末流。
一门好的处理数据的语言,我认为应该像sql, 正常智商的人半天入门,一周掌握,几
个月精通。像dplyr这种, 吭哧吭哧,发明了无数奇技淫巧,引入了一整套函数式编程
的江湖黑话,连楼主如此简单的用户需求, 都要绕这么大个圈, 确实令人对dplyr丧
失信心。
楼主的需求, 在sql里,无非就是group by A, 和group by A, B。
avatar
l*o
23
坚持把他抱走,和他比谁有耐心。

【在 w***y 的大作中提到】
: 我就是不知道怎么stop他,我说no, ahahaha,或者把他抱走,都不灵。 他对各式玩
: 具也都兴趣不大,很执着的要去爬。。。。

avatar
w*m
24
我是统计转马公的低端程序员。
统计语言有很大的问题。
像R,SAS还有matlab,总觉得用户写不了循环。
什么事情都得用个轮子或者dsl。
其实aggregation这类,就是循环一下加个hash table就解决的问题。
很简单的算法,然而,必须去查他们的document,或者stackoverflow。
这样的编程会很累,不会有那种一气呵成的击杀感。
对编程的兴趣是个打击。久而久之,就搞得很苦逼了。

【在 m******r 的大作中提到】
: 请问什么叫做dsl, google了一下没找到。
avatar
q*u
25
牵走比抱走要有效得多。最有效的方法是赶走。

【在 l*****o 的大作中提到】
: 坚持把他抱走,和他比谁有耐心。
avatar
m*n
26
是的,语法没有通用性。
这里用着不错下回那里一用就崩溃,是心理暴击。
编程最讨厌的是语言自己有缺陷,类似R这种。
但是好像编程都会遇到,尤其是和硬件打交道的。

【在 w********m 的大作中提到】
: 我是统计转马公的低端程序员。
: 统计语言有很大的问题。
: 像R,SAS还有matlab,总觉得用户写不了循环。
: 什么事情都得用个轮子或者dsl。
: 其实aggregation这类,就是循环一下加个hash table就解决的问题。
: 很简单的算法,然而,必须去查他们的document,或者stackoverflow。
: 这样的编程会很累,不会有那种一气呵成的击杀感。
: 对编程的兴趣是个打击。久而久之,就搞得很苦逼了。

avatar
a*8
27
": 不过这个puppy很乖,压根不知道table begging,大概不知道送到我嘴里的东西他
也能
在吃东西,还没开始吃,就是把东西方到我的桌子上,屁屁就坐在旁边眼巴巴的看着我
了,看着可委屈了,好像我从来没给他吃饱过一样。sign......
喂3
avatar
m*r
28
所谓数据分析, 老土管他叫‘熟橘分洗’,很形象, 大部分人做的,无非是根据业务
逻辑,对数据在不同层次上( 楼主题目中的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。
: 这样的编程会很累,不会有那种一气呵成的击杀感。
: 对编程的兴趣是个打击。久而久之,就搞得很苦逼了。

avatar
w*y
29
那大概什么时候开始table begging呢? 我要小心点

【在 a*****8 的大作中提到】
: ": 不过这个puppy很乖,压根不知道table begging,大概不知道送到我嘴里的东西他
: 也能
: 在吃东西,还没开始吃,就是把东西方到我的桌子上,屁屁就坐在旁边眼巴巴的看着我
: 了,看着可委屈了,好像我从来没给他吃饱过一样。sign......
: 喂3

avatar
D*n
30
好久沒用R,之前都是base裡面最簡單的辦法處理數據。
好像現在dplyr是主流,就看了一下,本來還覺得挺好的,後來發現這些問題,也頭都
大,搞的那麼噁心,還真的不如用SAS了。。。

【在 m******r 的大作中提到】
: 所谓数据分析, 老土管他叫‘熟橘分洗’,很形象, 大部分人做的,无非是根据业务
: 逻辑,对数据在不同层次上( 楼主题目中的group_by)进行aggregate, 然后对剩下的
: 变量请小学生做个加减乘除。。
: 这么简单的事儿 不知道为什么hadley 好多年从plyr改到dplyr改到tidyverse 引入各
: 种奇异的语法, pipe operator, mutate, underscore version of verbs, etc 结果
: 却像一架庞大的官僚机器, 机构臃肿 部门众多,却不能有效解决一个像楼主问的简单
: 问题。

avatar
a*8
31
我也不大记得了,好像是4个月大的时候

【在 w***y 的大作中提到】
: 那大概什么时候开始table begging呢? 我要小心点
avatar
m*r
32
hadley真应该学学sas的均值过程。 一个均值过程,无论你有多少factor,多少变量,
不管你要求多少统计值, 都是一网打尽不超过5,6行代码。 一本均值过程手册,不知
道超不超过200~300页,一天就看完了。
sas里面特有的by_group processing只要一行代码,by xxx后面随便你放多少factor.
概念上也是一脉相承, 完全可以用在其他过程步。

【在 D******n 的大作中提到】
: 好久沒用R,之前都是base裡面最簡單的辦法處理數據。
: 好像現在dplyr是主流,就看了一下,本來還覺得挺好的,後來發現這些問題,也頭都
: 大,搞的那麼噁心,還真的不如用SAS了。。。

avatar
y*d
33
差不多
我们家的狗子也是3-4个月开始蹲桌边的
avatar
D*n
34
是啊,不得不說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.
: 概念上也是一脉相承, 完全可以用在其他过程步。

avatar
a*c
35
Hadley就像很多gay一样,聪明滑头奇技淫巧,反应在语言里也是,不入流。龟叔比他
强的不是一个档次。

【在 m*****n 的大作中提到】
: 是编程者的精神洁癖不够
: 像Python的龟叔的洁癖很强
: 就强行把语法都统一了
: 而且一个语法在任何情境下都通用
: 这没有精神洁癖是做不到的
: R的思维方式比较老中
: 就事论事,得过且过

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。