从另一种视角看R语言的Tidyverse方言
很认同作者的观点,我极为讨厌R中所谓的”管道“,纯粹增加代码的复杂度,降低可读性,还非常死板,调试费劲,改代码等于重写,感觉完全是”因噎废食“,
用户需要的根本不是所谓的”管道“,而是一套真正的”分析流程管理解决方案“,改方案可以可视化,可以嵌套,可以保存为”工作流程模板“便于下次重用、修改。
从我个人来讲是先学的base_R入的门,是在学了ggplot后才知道有tidyverse,现在给我的感觉就是两种混用,有时用tidyverse很麻烦,如前几天我遇到一个行连接的小事,用tidyverse 中的bind_rows()时因输入不同文件同变量的有的是数字有的是文本,就很麻烦连接。但用rbind()就直接搞定。我感觉tidyverse思想与base_R相差有点大,自己水平也不高,就是那种好用就用那种了。
dapengde 趁着七普人口数据出来,老龄化的趋势,可以写本《中老年人学习R语言》,即当真事大事,还趣味的回复一下,60岁及以上人口为26402万人(2亿6400多万),占18.70%(其中,65岁及以上人口为19064万人,占13.50%)V,从根本来说,相当于R的人口基数太少了,而打破这一局限,“一大,一小”不只需要从娃娃抓起,也需要从“大”的抓起,反而这一人群,即慢的有个性,慢的有耐性,慢的有才华...诚如N年前的“寻乌调查”中的人物,62-23岁的年龄跨度,按年龄从长至少排序
郭清如、62岁、(秀才,赴过乡试,做过小学教师,城区人)四人,到过一二次调查会,稍微供给了一点材料。
郭友梅、59岁、在材料上与我以大量供给的,是郭友梅(杂货店主,曾任县商会长,本城人)
范大明、51岁、(贫农,县苏职员,城区人)
刘茂哉、50岁、(老童生,开过赌场,做过小生意,原是小地主,降为贫民,曾任县革命委员会委员,现任区苏委员)两人,也供给了一部分材料,间或到我们的调查会。
刘星五、46岁、(农民,做过小生意,乡苏委员,城区人)
陈倬云、39岁、(自治研究所毕业,做过缝工,做过小生意,当过小学教师)
赵镜清、30岁、(中农,做过铸铁工,做过小商,陈炯明部下当过兵做到排长,现任县苏委员,双桥区人)
李大顺、28岁、(贫农,曾任区苏委员)
刘亮凡、27岁、(县署钱粮兼征柜办事员,现任城郊乡苏维埃主席,城区人)四人,他们都是经常到调查会的。
钟步赢、23岁、(梅县师范生,区政府主席,石排下人),摘自http://dangjian.com/specials/xwdc/mzdzxw/201507/t20150709_2720620.shtml
airexceltor 写书太耗神。不知道有没有出版社愿意为此立项。
dapengde 28开原则,可以先脑洞一下,出一份大纲(思路),
至于写作?有没有出版社愿意为此立项?这个问题,光看概率,也可以提前预知的,反而压根不愁了
君不见《老年人学计算机》类似的书,多有市场,这个通过图书电商网站平台可以统计出来v
(当我年老的时候,我可以为孙子孙女们讲故事,传奇一生,快乐一生!爷爷/奶奶当年做了一件小事,同时也是一件大事,力挽狂澜....)
愁的如何通过协作,在线的方式(为主)把这样的事,从小事,细活中,把R的历史,网站的问题做一个系统的总结盘点,即有内涵,还可以挖掘出来诸多新的认知见解(当年我要有这样的思路,我怎么怎么的....)还让人即产生动力,并且从点滴之中获得灵感
诚然,tidyverse在入门学习是复杂了点,就像作者说的一样“认知过载”。而且,学习了tidyverse不等于放弃了base-R,至少本人在大多数情况是混着用的。但是,举个例子,生态学的Vegan包,对tibbles支持就不是特别好,所以我通常只使用R自带的函数。至于管道,仁者见仁,智者见智,有人觉得难用,有人觉得好用。总结下,作者其实在意且强调的是base-R和tidyverse在R语言教学中的利弊,两者没有对错,看个人的知识储备和需求。
歪个楼. 大家对 tidyverse 的讨论和我昨天看到的 Mathematica 的一篇文章有些微妙的呼应: https://blog.wolfram.com/2019/04/02/why-wolfram-tech-isnt-open-source-a-dozen-reasons/ 这篇两年前的文章来自 Mathematica 的官方 blog, 它试图解释为什么 Mathematica 不应该开源. 而底下的留言出现了各种反对的声音.
至于 tidyverse, 我不认为真的可以在实际宣传中, 去 "公平" 地推广 tidyverse 和 base R, 我不认为真的有这种公平的可能性和必要性. tidyverse 的背后是自上而下统一 "整容" R 的雄心. 如果我是 tidyverse 的倡导者, 我要写一本书介绍 tidyverse, 各位能够想象在一本小小的书里我还要完全地, 公正地兼顾 tidyverse 和 base R 吗, 要做到不偏不倚, 不过度宣传, 然后让读者做出自己的判断吗?
根本不可能. 现实世界中的观念的竞争和碰撞就不是这样的. 受众学习的过程也不是这样的. 这就像你写简历, 还要在简历中坦言自己有哪些缺点, 以达到公平公正的中立? 真正的公平难道不是竞争出来吗? 各方尽自己所能推广自己认为对的东西. 从这个角度说, 我不认为 tidyverse 有任何不对的地方.
作为用户和 R 的开发者来说, 我从入门到现在, 到处都是 tidyverse 和 Hadley 的痕迹, 这些痕迹不会百分之百影响我, 但我的感受中, 它们对 R 社区的影响是完全利大于弊的. ggplot2, devtools, R package 的书, advanced R 的书 ... 如果 tidyverse 在宣传上有什么问题, 那也只能说是这些益处的硬币的反面, 没法割舍.
- 已编辑
tctcab Hi, 朋友, 如果是建设性的讨论和分享, 哪怕是很激烈的批判, 当然无可厚非. 比如记得本站有朋友专门对比了 base R 和 tidyverse 的作图.
但是剩下很多讨论我觉得并不具有这种建设性.
比如 "净土宗" 这种称呼. 先给一个群体扣一个大帽子, 然后不说具体内容, 不说具体是谁, 不分程度, 整体扫射. 这和 "女司机" 或者其它更恶劣的群体性攻击有什么区别? 这不反而加剧了这些人看不惯的 "宗教纷争" 吗? 很多批评我不知道是针对 Hadley, 还是针对某些 tidyverse 的包的使用者, 还是针对所谓的脑残粉. 如果不能明说, 那不是应该不说吗? 不然整体看起来非常不君子不地道.
再比如这篇文章里和站里其他朋友的观点, 说 tidyverse 不应该这样宣传, 不应该这样教学. 但这和 tidyverse 本身又有什么关系? 这不就类似于 "水是好的, 但不能多喝" 吗? 我上面留言已经说了, "更好" 是市场化竞争出来的, 而不是靠开发者自身的超高道德的中立和客观而来的.
再有一些留言就是在说自己的喜好. 比如 "我就是不用管道", 也没有例子, 也没有分享. 我看不出这有什么建设性.
- 已编辑
就这篇文章来说, 如果它只是从教学角度来说, 我觉得有一定启发. 这背后的争论在别的语言里也有. 如果有框架, 尤其是当这个框架更统一更易上手的时候, 教学者应该注意什么.
但是这个问题比咋一看要复杂. 因为受众起码有三类, 一个是不想深入的, 只是快学快用; 一个是想精通 R 语言的; 一个是开发者.
对于第一类, 我不觉得 tidyverse 拿来教学有什么没问题. Hadley 那本数据科学的教材我觉得非常友好. 对于不想深入的人, 了解不了解 base R 有很大关系吗? 这个地方我又觉得很不明确, 他们批判的到底是谁? 是 Hadley 的书? 还是哪个在线的课程? 这么空对空的批评十分没有意义.
第二类第三类读者就根本不在讨论范围了, 因为他们不可能只看一本书, 甚至不可能只学一门语言.
yuanfan 是的, 我相信很多用户会有自己的判断和阶段. 这样的用户也会受益于竞争下的参差多态.
至于 "垄断", 我认为是不可避免的. 一旦有中心化的, 自上而下的设计, 就会有这个风险. 但是我作为用户绝大多数时候是自由的, 有选择权的.
我有博客 https://flujoo.github.io/works/ 但是很久不更新了. 我在公众号 "冬夜骑士" 里有一些关于自学的文章.
tctcab 害, 并不是我生气了, 而是我相信大家都认同就事论事, 指称明确的风格吧?
yihui 兄的文章我看过, 说实话有些挺遗憾. yihui 兄希望 Hadley 作为有很大影响力的人物应该审慎, 但是反过来, yihui 兄在这个论坛里同样有很大影响力, 但未必有那样的审慎. 但我不认为这是问题. 真正的遗憾是, yihui 兄自己博客下关于 tidyverse 的文章, 我看不出重点是什么, 而且我也不认同其背后的价值观. 正如上面所说, 我相信竞争, 同时认为有话直说哪怕很逆耳是一种好的品质.
另外, 我非常喜欢 yihui 兄开发的作品, 我相信这些作品一定程度上是对之前已有的产品不满而开发的, 那么这种不满一定会间接导致 "过度的" 宣传, 除非你压根不宣传. 这些没有任何问题. 但为什么到了 tidyverse 这里, 这个流程就有问题了? 也许有不适合放在台面上说的原因, 但既然如此, 不是应该干脆不说吗? 要么就勇敢地去批评.
yuanfan 先不管水平怎么样,只是评论的话我是有发言权的,我很赞同认知是会变得,我刚接触tidyverse 的时候有种惊为天人的感觉,后面慢慢变得还是更喜欢 base R 的风格了,原因文中都有提到,论战这种事,也没必要,这种事情强求不得,不过多数人都有一种心里,就是认为自己是对的时候,对反对派的观点很难心平气和,这个我觉得无解,不然那么多语言圣战就不会发生了。
- 已编辑
flujoo yihui 兄的文章我看过, 说实话有些挺遗憾. yihui 兄希望 Hadley 作为有很大影响力的人物应该审慎, 但是反过来, yihui 兄在这个论坛里同样有很大影响力, 但未必有那样的审慎
扪心自问,我对使用我的影响力是相当审慎的,通常我是保持了克制(比如我已经停止主动发推特),不去主动点燃语言或工具或框架圣战。如果你看到我什么地方不够审慎,欢迎指出来,我乐意接受批评并改正。
flujoo 真正的遗憾是, yihui 兄自己博客下关于 tidyverse 的文章, 我看不出重点是什么, 而且我也不认同其背后的价值观
请问你指的是哪篇?可以点名出来,我可以尝试解释重点。
flujoo 另外, 我非常喜欢 yihui 兄开发的作品, 我相信这些作品一定程度上是对之前已有的产品不满而开发的, 那么这种不满一定会间接导致 "过度的" 宣传, 除非你压根不宣传. 这些没有任何问题. 但为什么到了 tidyverse 这里, 这个流程就有问题了? 也许有不适合放在台面上说的原因, 但既然如此, 不是应该干脆不说吗? 要么就勇敢地去批评.
你说的没错,早期的确有过度的宣传。那是我年少轻狂不懂事,认为自己发明了可以碾压对手的产品,便可以理直气壮碾压他们。在我意识到这个问题后,我已经向 Sweave 的作者道歉,并修改了过去那些过分的宣传语,以及将此事记录在了我的个人错误反省日志中,以提醒自己以后不要再干这种事——凭本事说话,尽量不凭嘴或脸,让用户自己判断。
flujoo 比如 "净土宗" 这种称呼. 先给一个群体扣一个大帽子, 然后不说具体内容, 不说具体是谁, 不分程度, 整体扫射.
这一点上,我可以保证站直了让你打。我不会抽象地扣帽子,具体内容、具体是谁,你都可以从链接中看见:https://yihui.org/cn/2019/07/tidy-noise/ 如果你还需要更多例子,我还可以提供更多。叫净土宗,正是因为它有太多的宗教特征。它对用户的洗脑程度太强了(如劝退 for
循环、劝退 setwd()
,初衷是好的,但因为声音太大,所以用户真的信了这些基础 R 里的东西都是万万不可碰的)。它的宣传仰仗了我们厂的雄厚财力,比如疯狂印制六边形贴纸,甚至是 dplyr::filter
口罩。我不是说绝对不能宣传,而是要看看四周其他人再决定合适的宣传力度。试问这 R 江湖上哪个团体的财力和影响力能赶上 RStudio?没有,一个也没有。如果其他人都没这个特权,那么我认为我们厂应该谨慎使用我们的特权。为什么 data.table 的作者 Matt 感到痛苦?因为他不可能拥有我们这么大的声音,而且我们的人还时不时有意无意抹黑他。当我们在几千人的 RStudio 大会上讲,data.table 速度没有我们的某个包快时,Matt 只能被打掉门牙和血吞,而事实上这是个不公平的比较,事先也没有与他通气。data.table 最引以为豪的就是速度,你说它的速度不如你,那就是切喉式攻击。用一个不公平的比较来要别人的命,我想知道这种宣传有什么可辩护的。这件事发生后没有一个人出来说抱歉,在一个细小的角落里有澄清,但那有什么用呢?在几千人的会议上揍了人一顿,然后下来在一个小房间的角落里说“哦,我好像揍错了”。要是条汉子,就应该主动想办法用几千人会议那样大的影响力去恢复对方的名誉,并谨记下次不要再犯这种错误了。可惜挨揍的人这辈子也不会拥有我们这么大的影响力,只能眼睁睁看着我们一次次的不公(是的,前面那个不是第一次也不是最后一次不公)。
但凡 R 社区里有另一个团体的财力和影响力能赶上我们哪怕三分之一,我都不会对我们厂的宣传感到不适,问题就是我们的影响力有垄断性质。同你一样,我认为竞争是好的,但同时我认为竞争应该用公平的手段。上一次的 hugodown 事件,让我很受伤的原因就是那是一场不公平的竞争,作者散布了一些抹黑我的虚假消息。我可以接受正面挑战,但不能接受在我毫无意识和准备的情况下对方从背后朝我开枪。这事过去了快一年,这个包的 README 里依然包含 blogdown 的虚假消息,本来我的预期是他自己能主动给予 blogdown 一个公平的比较,但因为我实在太心累,这事我也不想管了。
我个人会相对高调地与 Jupyter 竞争,原因就是我认为 Jupyter 有着过分大的影响力,而这个产品从设计上远不如 R Markdown。向着远比我影响力大的产品出拳,我不会犹豫,但我通常不会向影响力比我弱的人或产品出拳。
因为我们无休止的宣传攻势,我都不止一次见人说因不会 Tidyverse 而只精通 base R 而感到惭愧了。本来我前几天刚记录了一个例子,但刚发现说这话的人把那条消息删了(更新:我记错了,没有删,在这里)。她的原话大概是“我精通 base R 并且觉得它可以满足我的需求,但是我还不会用 Tidyverse,很惭愧,请大家给我推荐一些 Tidyverse 入门资料”。这不是很荒谬吗?如果精通 base R 并能满足你的需求,为什么要对不会 Tidyverse 感到惭愧?是谁让她感到惭愧的?如果有 LaTeX 用户说“我精通 LaTeX 但我不会用 Markdown,我很惭愧”,我会立马写一篇日志来撑他,告诉他完全不必投奔 Markdown。
套用 @Liechi 最近常用的“生而为人”句式,我想说,生而为 RStudio 人,我很抱歉。我们对一些人和现有产品的持续碾压,并没有停止的迹象,我可以预见不久的未来又要有人受伤,而他现在还浑然不知。我们一直在重复发明轮子,并利用我们的宣传优势让我们的轮子盖过别人的轮子,再用羊群效应(Matloff 上文中提到的)牵引更多的用户——看,我们的包下载量破百万了,你也快上车吧。没有人看到背后的牺牲,那些牺牲者的声音都被我们掩盖了(尽管不是故意的)。回到前面说的审慎,我这几年一直在顶着压力倒车,控制我的宣传力度。比如我移除了我的包的下载量图标,以免误导用户“这是个大家都流行用的包”;再比如 bookdown 大赛只举办了一届就没办了,也是因为我发现这种竞赛太能创造影响力了(后来 Github 上 bookdown 库的星标数都超过了 rmarkdown 库),不过可惜,本营销专家创造的这个毒招被我们厂其它团队继承了,后继推出了各种大赛。我曾经试图提醒过他们别太高调了、竞赛频率和数量太高了,但人微言轻,营销团队一致反对我。
关于宣传,还有一点我没时间展开说的,就是净土团队的宣传有个与众不同的特征,就是特别爱宣传“看起来好看”的东西。一白遮百丑。比如管道代码就是看起来好看,普通人一眼就容易爱上,但入坑之后可能要很久才能发现各种毛病(不稳定、难排错、或 yuanfan 说的速度慢)。早年间,Hadley 对 data.table 的攻击之一就是他觉得中括号语法太奇葩(当然后来收手了)。一黑遮白美。因为看起来不好看,所以速度快仿佛都不是什么优势了。追求好看可以作为个人爱好,无可厚非,但作为社区领袖,引导大家追求好看的东西,背后会产生一些不公,因为有些有实力的人没有这个美工素质或技能,而且这种潮流会给人带来一些额外的工作量,比如现在写个 R 包几乎必须制作一个六边形图标。净土团队甚至为自己制作了三维全息图标,普通 R 包作者谁有这个财力、技能和闲心搞这些。
若要我接受这些在我眼中不公平的竞争,我就只能以“天地不仁,以万物为刍狗”来说服自己了。罢了罢了,弱肉强食,都自生自灭去吧。Matt 说他想过几年转行去开出租车,说实话我也有一丝想退出这个江湖的念头。我喜欢写代码,但我厌恶代码带来的政治和宗教。像我们厂长在我眼中就是条好汉,写代码就是写代码,站直了写,很少抛头露面或摇旗呐喊,一年到头你都很难感受到他的存在,但要干就干一票大的,每隔一两年来一场火山爆发,凭产品说话,不凭嘴。打嘴仗实在是浪费所有人的时间。
最后要澄清一点,我大力支持影响力小的人为自己多吆喝营销,我甚至愿意帮忙吆喝。上面针对的只是我们厂,在垄断影响力的情况下,我认为我们应该有点自知之明、适当收手。这也是 Matloff 上文中表达的意思之一(RStudio 一手遮天)。
yihui 你说这些我觉得非常真诚, 我也能从你角度看到许多我之前不可能看到的问题. 之前表达出了误解, 我很抱歉.
但是我也可以给你提供一个我的视角, 这个视角并不是要反驳你, 而是也许能让你感受到, 如果我没看见你上面这些留言, 可能会产生什么误解.
第一, 我自己用 R 好多年, 这之中用过很多 R 的包, 看过很多教材. 我几乎可以在任何一个角落看到 Hadley 的影子. ggplot2, devtools, R package 的书, advanced R 的书 ... 这些让我对 Hadley 以及他所倡导的 tidyverse 系列有一个很好的印象. 我这里并不是要表达崇拜什么的, 而是想说, 我作为一个外来者, 我接触不到你说的这些斗争, 那么我对他和他的组织的印象就是: "对 R 贡献很大的人, 一直在输出作品, 值得尊重".
第二, 然后在这个前提之下, 我看到你的博客, 主要是 https://yihui.org/en/2018/11/dependency-winner/ 和 https://yihui.org/cn/2019/07/tidy-noise/ 博客中有批判的意味, 但是非常笼统, 对象又不太明确, 有时像在说 Hadley, 有时又像在说极端脑残粉, 整体的 "净土宗" 帽子打击面又非常大. 我现在当然明白了你到底背后经历了什么. 但是说实话, 我的最初印象是不太好的. 我当时的感受就和 Hadley 在你博客下留言一样, 不明白你到底在批判什么. 之后你又发了一个 marketing 的博客, 但并没有回应有争议的部分.
第三, 在这两个前提下, 我已经对你的动机不太确信了. 这时候我看到你们 hugodown 的争议. 但是我看到你有一个类似于 testthat 的 testit 的包. 如果我受第一第二的影响, 然后粗粒地去看待这件事, 很容易觉得你双重标准.
第四, "净土宗" 这个帽子太大了. 虽然你动机没有恶意, 但是 tidyverse 包含了太多的包, ggplot2 也是, stringr 也是. 而且如果把 Hadley 也纳入进来, 那么他的 devtools 系列也是. 但我看了大家的帖子, 更多是在说管道和 dplyr. 这也是我说为什么不能具体地, 明确地说. 比如你说的 dependency 问题, 我觉得就是具体的, 我回头就在我的包里考虑了你的说法. 然后是 "净土宗" 这个用户群也太广了, 像我在别的帖子里也支持过管道, 是不是我也算? 当然你可以说, 你说的是那些极端的脑残粉, 但就像你用 "黑人" 去指代 "黑人中的坏人" 一样. 当然, 还是要强调, 我这是在表达我之前的印象, 你说了那么多, 我现在能从你的角度去理解.
总体来说, 如果你把自己代入我的视角, 很容易对你的动机有误解.
- 已编辑
yihui 这位“精通 base R 并且觉得它可以满足我的需求,但是我还不会用 Tidyverse”的情况,我感同身受。
虽然我的 base R 离精通还差得远,但满足需求是足够的。问题在于,有时候遇见个事儿想搜个答案,搜到的答案全是 tidyverse 版本,不学的话看不懂。吭哧吭哧学会之后回头看,这特么不是脱裤子放屁嘛,根本用不着 tidyverse,何必兜个大圈子。
flujoo 你讲的这些感受,有相当一部分跟我的初体验相似,例如对“净土宗”这顶帽子的不适。可能是由于多年来对益辉博客以及本论坛的关注,有了这种感受之后,我会自动地代入到一个大的语境里,试图理解益辉们到底是在说什么。
益辉博客和本论坛的帖子,我觉得是要当长篇小说来读的;单独拎出一篇,你可能不知道有些梗是怎么回事;但是想起其他章节,某年某月他写过一段什么什么话,结合起来就知道他的感情色彩是什么。就拿“净土宗”一词来说吧,我第一次看到这个词跟你的感觉差不多,但是紧接着就联想到益辉的博客里时不时出现的一些涉及宗教或哲学的只言片语,例如什么文殊菩萨头像,什么跟方丈喝茶,什么丰子恺《佛无灵》,什么宗教领袖马云,连听个叶倩文的流行歌曲都能扯到佛。这时候就比较能接受他这个调调了:“净土宗”这个词我读起来好像是顶大帽子,而对他来说大约就是他日常语境里普普通通的一部分。
做个不太准确的类比:比如,在某人的一篇文章里,读到一句“吾生也有涯而知也无涯”,心想这家伙是不是又在立志“要把有限的生命投入到为人民服务的无限事业里”?不过,立刻联想到这家伙早就在别处说过一句“以有涯随无涯,殆已”,原来他只不过在发个牢骚。类似地,当益辉说“我不跟发文本截图的人说话”,tctcab 也说过他不跟某种人说话(抱歉,忘了),猛一看觉得他们怎么这么傲慢,但我是了解这个梗的,听到之后只是忍不住狂笑。再如,上面我回复益辉的那段话,其实早就被他在某处举过一个绘制“黑夜飘雪花”的图的时候把这个意思已经说尽了(抱歉,忘了出处),搁平时我就不敲这段回复了,这回敲了只是为这里做个铺垫。
所以我觉得出现一些误解是难免的,这大约不能算作“断章取义”——这“章”未免大了一些。所以你看大约益辉们也意识到了,所以现在写个帖子满屏都是超级链接,就怕不知道这些梗的出处。写得好累,真可怜。