从另一种视角看R语言的Tidyverse方言
作者的观点还是挺有代表性的,学习tidyverse
就像学习框架,会失去很多基础层面的了解和变通;对于新手而言,会彻底打破学习的系统性。
我混论坛一段时间也隐隐约约感受到大家不是很推崇Tidyverse,甚至有点政治正确的味道哈哈。
说说个人感受,我是先接触的base R再接触的Tidyverse。以我个人的学习经历来看,Tidyverse上手很快,增加了学习R的兴趣和信心,慢慢地也会开始尝试深入学习base R。
当然仅仅是个人经历哈哈
我最开始接触的时候没tidyverse,后来接触了一些之后确实不错,很多函数很方便,到到现在我发现其实我和他不合拍,尽管他的语法像自然语言,到怎么说呢,我记不住那么多自然语言,反而是 data. table 对我来讲更友好一些,我偶尔也用tidyverse的包里的函数,有时候就是方便一些。
我觉得不存在政治正确与否的事情吧,大家就是就事论事,这个论坛好像没什么人走极端,至少那几个版主没有说过反对的话,看上去也是对tidyverse那一套很了解的样子。
当然,走极端的例子是有的,比如新手须知,对不合格的帖子先让改版式,但我觉得大家都很忙,发帖子按规范是相互尊重的问题,也跟tidyverse没关系,话说tidyverse还不是强调规范?
lovebluesky 嗯,大家都很忙,我们都可以理解。新手须知更多强调的把问题问清楚(包括提供可重复的例子、系统信息等),而不是帖子排版格式如何。如果我们有强调帖子格式的话,那通常是因为帖子的格式影响了我们对其内容的理解,比如代码没有放到代码环境中而带来一些奇怪的斜体(下划线导致)或下标(~~
导致)。问题问不清楚的话,会导致大家追问好几轮,这些追问都是可以通过阅读新手须知而避免的。这种例子一挖可以挖一箩筐出来。
以上为跑题。
回到正题,我觉得这里面辩论的双方都是没有事实依据的。到目前为止,打仗都是在凭感觉。这也真是有意思,双方都是统计学专业人士,却没有人用试验和数据来说话。我想看到的是类似这种证据而不是打嘴仗:https://dl.acm.org/doi/10.1145/3291279.3339421
我眼中净土宗的主要问题就是宣传攻势太过分了,就算本意不是抹黑传统的基础 R,它的高姿态宣传也造成了一些人对基础 R 的蔑视态度。比如他们对 for 循环的持续丑化和妖魔化,导致有些人就像被洗脑般认为用 for 循环似乎就是一种既不干净又慢的编程方式,单就这一点,我就可以指出我经历过的几个例子。如果净土宗要声称自己比基础 R 优越和高效,那么我认同 Norm Matloff 说的:你必须给予基础 R 同等的宣传力度。否则,你无法下结论说净土宗的流行是因为它优越而不是因为宣传。这是基本的试验设计思想,缺了对照组,怎么能下结论嘛。
- 已编辑
继续歪个楼:tctcab 用银行填表来类比,这个很有趣。如果是客户求银行办事,那么甭管表多复杂,客户也得老老实实按格式填;如果是银行求客户办事,那么银行的营业员会主动帮客户填。所以,说到底是谁求谁的问题。
关于新手须知,或许可能是我近年来遇见的最奇特的矛盾体。
一方面,这个须知有用而必要。如果不遵守这个规则的话,问题问了也白问。
最近的一个例子是 R语言 ifelse or For迭代问这个帖子,图都截出来贴了,挺诚恳的,问题看起来难度也不大,但就是没人回答。反省一下我的心路历程(这个我可能以前吐槽过,重复吐槽大家别烦我):
- 我本来想回答,但是我水平有限,这个问题一眼看不出答案,得试;
- 然而,没有示例数据,那我就得从零构建数据;
- 构建数据涉及中文字符,我还得先调整我的英文系统环境;
- 作者说“两种写法结果都不对”,但具体怎么不对了,什么故障信息,我不知道。
- 也就是说,即便费力编出了个示例数据,也不一定出现故障;即使出现故障,也不一定跟作者遇见的故障相同;即使碰巧故障相同,也不一定能解决。
- 那就算了吧,大家都很忙,谁有时间谁回答吧,我又不是退休闲得没事干。我等着看正确答案,学习一下。
纠结了 6 步的结果就是放弃。提问者应该是不知道我这百转千回的矫情吧。我觉得也不能怪提问者。设身处地,换位思考,我自己当年不见得会贴图呢。只能说抱歉。
但是另一方面,目前的新手须知篇幅太长了,对新手要求太高,某些时候形同虚设。不就是问个问题嘛,还得先学 markdown 排版,学怎么上传图片……光这些技术又引出新的问题。等都学会了,咦,我想问什么来着?
毕竟很多新手是遇到了问题着急求助才来的。这种心情下,很难花时间把新手须知消化掉,最后索性抛开不理了。
打个比方,可能不恰当,并不想冒犯谁,这就好比我们村的乡亲头一次进城,过马路发现还有红绿灯,什么红灯停绿灯行黄灯等一等,太麻烦了,我就是想过个马路而已,闯吧。围观的城里人说,乡下人不懂规矩,太土;乡下人说,城里人规矩太多,烦不烦。
这个矛盾是不是无解?
我们有交通协管呀!苦口婆心日复一日年复一年地劝着,拦着。
所以这道难题的唯一解,就是靠 @tctcab 等菩萨们来普渡众生了。
- 已编辑
那些凤毛麟角的好提问,距离答案只差临门一脚。遇到这种百年不遇的好问题,答主们喜极而泣,趋之若鹜,像捡了个宝。
这个事儿吧,见 @yihui 那篇 MRE 悖论 (The Minimal Reproducible Example Paradox)。其中说到这么一句:
当一个人有能力提供一个最小化示例的时候,很有可能他已经非常接近答案了,兴许只有一步之遥。实际上,他已经有能力自己解决这个问题了。
When a user is able to create a minimal reprex, chances are that she is really close to the root problem (perhaps only one step away), so that she may actually be able to solve the problem by herself!
简单来说,有能力把问题说清楚的人,基本上已经把问题解决了。
逆否命题:凡是提问的,基本上说不清楚问题。
根据这一条,新手须知是鼓励新手能把问题提好,这基本上等同于鼓励新手培养自己解决问题的能力,进而等同于鼓励新手不提问,...我的天,这简直就是新手悖论。
我想说的就是新手发帖要规范,并非说这样不好。我比各位理解更深刻,我是做售后的,每当听到某某数据不正常,我该怎么办的提问我就得烦死,得追着问来问去,好多时候问了还不知道需要看的参数在哪里,人家根本不关注。
我的意思是大家都很忙,格式和要求不规范,没必要浪费时间追问,因为我的追问公司是给钱的,虽然少的可怜,但是在论坛里,大家时间都宝贵的意思,而且还不要钱。
我也觉得这事喜欢和不喜欢就是一种感觉,我就是喜欢data. table,但我也不讨厌tidyverse,我也只是不喜欢千秋万代,一统江湖的声势浩荡。
data.table 这样子有规律的代码,我不用死记硬背一堆函数名字,我只是需要知道,按原则,i,j,by
该怎么填就行。
希望这些解释不会让人误解我讨厌新手须知,我是支持的,因为我每天都要受到不规范提问的荼毒,忙的时候心里真是很烦。
- 已编辑
话说新手须知是很长,但耐心看完了不管对这次提问还是对以后其他问题,不限于本论坛,都是很好的帮助,我并不觉得着急到连十几分钟浏览一个帖子都没时间。
当然,这个是一个成长的过程,我最初也是什么都不懂瞎问,但是如果没人回的时候还是要看置顶帖的,帖子名字都提示到家了。我觉得这是一个态度问题。
tidyverse 是一套针对数据分析的生态,个人觉得相对于base R 对于没有编程经历的人容易上手很多,并且在数据分析上也足够强大。如果想做开发相关的,就要学 base 和更通用的编程知识了。
这楼歪得不知道还能不能回得来哈哈哈
重要的是生态,如果base-R 也可以有一套相对统一的规则去开发R包,tidyverse就是多余的。
比如tidymodel可以让各种各样的统计模型统一起来,不仅写起来语法相近,也可以帮助理解。
可能tidyverse里有些不同的编程理念,学习曲线稍陡,但学会了以后就比base-R杂乱的生态要好的多
tidyverse其实没你想那么好,论坛里就有例子:
个人对净土宗的看法经过了肯定-否定- i don't care三个阶段了,目前尽量不用净土宗,但管道遍地的习惯还是一时难改
tctcab 一样的历程,虽然我很菜,但不妨碍我们有一样的看法。
这些事情见仁见智,求同存异。本质上tidyverse 的想法不错,不喜欢就不用,喜欢就用,无所谓就需要用的时候用点,不需要的时候不用。
抬杠不需要,我又不是上学的时候有大把时间挥霍,可以去做个杠精。没必要,生产力第一,感觉对了就好。
很认同作者的观点,我极为讨厌R中所谓的”管道“,纯粹增加代码的复杂度,降低可读性,还非常死板,调试费劲,改代码等于重写,感觉完全是”因噎废食“,
用户需要的根本不是所谓的”管道“,而是一套真正的”分析流程管理解决方案“,改方案可以可视化,可以嵌套,可以保存为”工作流程模板“便于下次重用、修改。