Cloud2016 怼得爽,我喜欢。

  • str_length? nchar.
  • str_c? paste.
  • str_sub? substr.
  • str_to_lower? tolower.
  • str_split? strsplit.
  • str_detect? grep.
  • ...

可以列很长。横跨好几个包。

单从命名看,base R 确实一致性比较差。就说上面这几个,tidyverse 只需记一下 str_,然后用编辑器的自动补全功能就行了。如果先接触tidyverse,后接触 base R,那可能会觉得后者难记。有先入为主的因素吧。

除了功能和结构外,作者可能很大程度上是对 base R 的函数名不满,然而又改不了,所以干脆重来一遍。透过奇怪的函数名,隐隐感觉到某种情绪,恨不得砸烂一个旧世界,重建一个新世界。就跟罗振宇发明了很多新名词一样,其实是老内容。

tidyverse 最诱人的地方,还是哥哥画呃。

    Cloud2016
    极乐净土势力的好处是管道和参数一致性。能干的事情baseR也能干这也不假,同样的数据清理搞了很多新包我也觉得好麻烦啊。

    还有ggplot2,这个名字里的2就很让人费解

      tctcab Hadley 大人创意太多,而且每个创意都一不小心就太流行了,然后想来个大改动却发现已经刹不住车,只好另起炉灶。其实几年前险些就诞生了 ggplot3……又是一段 CRAN 黑历史斗争,不说了。

      一致性确实是非常重要,但一致性的副作用是宗教倾向。领略到了一致性的美好,就会过度敌视不一致性,以为只有一致性才属于文明社会、才是文明人应该遵守的法则。我今年初的报告中借弗洛伊德的《文明及其缺憾》表达了我对期刊排版一致性的强烈不满:https://bit.ly/pagedown#39 文明的特征之一就是秩序(服从),但它会压制个性。

      再次澄清一点:我支持极乐净土,我认为它的积极作用远大于毒副作用,我只是说没必要三句话不离管道,仿佛不管道、不成活一样。任何忍术都有其缺陷。

        yihui

        hadley大人很厉害,不过我也同意你的说法:将他偶像化并不好。

        我现在算是极乐净土和基础R的混打选手, 极乐净土的包或者理念其实好多都还没深入用过,比如我毫不羞耻地承认至今没搞懂non-standard evaluation…

          yihui 想起了上世纪初的文言和白话之争。有些人主张一切尽用白话,反对一切有古文气息的写法。鲁迅也宣传白话,反对古文,不过他说,例如:“林冲笑道:原来,你认得。”这样的表达也不必非要写成“原来,你认得。”林冲笑着说。

          如何方便就如何处理,何必尾生抱柱,痛并难过着。有些东西跟瘟疫一样传播,比如 Base R 的一些缺点和极乐净土(与 pipe)的一些优点。人们往往没有思考就接受了,然后成为新的传播媒介。

          我常用极乐净土的工具,但是看到 data %>% head() 这样的写法就仿佛看到了“林冲笑着说”。

            Base R 的操作函数

            • stats 包: reshape aggregate complete.cases
            • base 包: transform subset order split merge duplicated Reduce do.call apply lapply

            Base R 的函数非常简洁明了,上面提及的数据操作函数都在 stats 和 base 两个包里,再比如文件操作的系列函数 file.* dir.* sys.* 和字符串操作的系列函数 ?regex 也都在一两个 Base R 包里。它太丰富了,功能太全面了,可见 Base 是就其在 R 包的地位而言,这样做对初学者太不友好,查看一下 ls("package:base") 就会发现 1232 个涉及诸多方面的函数,极有可能当初设计的时候功能拆分没有到位,这些 Base R 的数据操作函数功能很强,文档看起来很枯燥,导致 tidyverse 有机可乘,将 reshape 函数拆成一个包,aggregate 函数在 dplyr 里拆成一段一段的,诸如此类。Python 不这么干,分成一系列子模块,功能分类做的比较好!这两种方式代表了不同的思维模式,萝卜白菜各有所爱。

            至于说宗教信仰,可能信奉 Base R 的真有,官方主页和文档万年不变,开发一直在 SVN 上,可能就那么二三十号人维护源码,开源但没有充分利用开源的力量(这个要分析源码提交记录,看是不是几十年来主力一直没变,我记得在某个大佬的 slide 上分析过,但是我记不得了在哪了,哪位大侠有空帮忙找下,我看过之后一直搜不出来,slide 里面有图,配色方案是 hcl 分析提交记录使用了 XML 包和不少正则,分析的源代码在 Github 上开放的)

            PS

            刚才脑子一下子清澈了,马上搜出来了,是大佬 Roger Bivand , Slide 及其源码在 https://github.com/rsbivand/eRum18

            • Hoas 回复了此帖

              Liechi 你跟我想到一块去了(文言与白话),只不过我没说出来而已;可能是最近你提鲁迅比较多,而碰巧我这几个月也正好一直在看鲁迅的文集。

              Liechi tctcab 我也是混打选手,但倾向于 Base R ,之前有 ggplot 但是庆幸我没赶上

              dapengde 命名一致性是个问题,输入是一个数据框,输出是一个非数据框,这种不一致性更加糟糕,这也是 tidyverse 造 tibble 打通数据分析流的优势,也成就了大量的 broom broom.mixed broomExtra tidymodel 模型输出一致性的清理包。另外关于 Base R 和 stringr 的正则、字符串操作函数对比,这有份完整的,不必自己整理了 https://stringr.tidyverse.org/articles/from-base.html

                Cloud2016 开源但没有充分利用开源的力量

                这句话说得好,有些时候我也很纳闷为什么会有这么多功能重复的函数,为什么非要在 base 已有的基础上开发新的以及,为什么 R Core Team 不作适当的整合,像 tidyverse 一样分好类。可能这里存在着一些看不见摸不着的博弈吧……

                我纳闷但是我不纠结,因为自己能用就行了,不需要多管哪个是哪个。

                  Hoas 既然已经知道 R Core Team 这么做,今后也不太可能做功能拆分和整合。所以 Base R 就是代指那些 R 包合集,相当于 tidyverse

                  Pkgs <- sapply(list.files(R.home("library")), function(x)
                    packageDescription(pkg = x, fields = "Priority"))
                  names(Pkgs[Pkgs == "base" & !is.na(Pkgs)])
                   [1] "base"      "compiler"  "datasets"  "graphics"  "grDevices" "grid"     
                   [7] "methods"   "parallel"  "splines"   "stats"     "stats4"    "tcltk"    
                  [13] "tools"     "utils"    

                  Liechi yihui 对圆环套圆环那种多层套娃来说,管道确实方便阅读,层数越多越有利。然而据我观察,用户养成习惯之后,即便是两三层,管道顺手就来了,挡不住。这个小东西表面似乎是技术层面的改动,然而底层碰的是哲学层面,或者说是思维方式。俗称洗脑。

                  Cloud2016 tctcab 像 ggplot2 这样的包名还算是好的,dplyr 已经到我记忆的极限了,“噗啊啊啊”包完全靠拼音才记得住,而专管管道那个包的名称……我放弃治疗了。@yihui 不要嫌弃,如果换我,我也加载 'tidyverse',而不是 'mag...'——臣妾实在记不住啊!

                  包名和函数名是我转用 tidyverse 的最大障碍,纯属人为制造,完全没必要。str_c()如果叫str_paste()select() 如果叫 df_subset(),那么对 base R用户就会友好很多。而像summarise(),猛一看还以为是 summary(),其实它是tapply(),这就让人很割裂,似乎跟 base R 有不共戴天之仇,拼命任性地划清界限,而不计对 base R 用户习惯的忽视。换位思考一下,如果 R 初学者先接触了 tidyverse,那么让他从 summarise()tapply() 过渡肯定也是内心一百个不情愿。正如我在前两天的吐槽帖 里所说:

                  生活在秦国的人,不需要知道周天子。

                  至于 tidyverse 函数输入和输出的一致性,它确实是一个卖点,然而我觉得并不是很大的痛点,有人为炒作的水分。“输入数据框,输出也必须是数据框”,这个前提是 tidyverse 很多函数存在的合理性之一,然而推敲一下,这个前提的基础并不那么坚实——它把“一致性”偷偷限定在了“数据框”层面。这样,管道出口入口处倒是一致了,可是得先把数据转成 tidyverse 接受的形式才能进管道,而管道里出来的不一定是你要的最后结果,还得进一步转换。可是别忘了,base R 的一致性也很好啊,只不过是体现在维度更低、结构更简单的“向量”层面。如果说 tidyverse 是对数据进行分子层面的改造,那么 base R 就是进行原子层面的改造。

                  作为一个普通用户,我上述看法可能都是片面甚至是错误的。不过,就像秦灭周一样, tidyverse 的野心若隐若现。未来,tidyverse 会不会跟 base R 分道扬镳,就像 openoffice 和 libreoffice 呢?

                  如果是这样,那就干脆把 base R 跟 tidyverse 当作两门不同的编程语言来学习和使用吧。

                    dapengde 专管管道那个包的名称……我放弃治疗了

                    我也是放弃治疗了,不知多少次我要先找 dplyr 然后找那个包,为啥不直接叫 pipe 我绝对 1 秒钟记住它

                    这些大神都有个习惯,取一个颇有深意的名字,在我看来最接近内容的是好名字

                    yihui

                    隔一年把某大包作者来出来炮击一次啊

                      dapengde summarisetapply 的一大不同是它们处理的数据形式不同,summarise 要求数据符合 tidy 风。我觉得 Hadley 提倡的 tidy data 是极乐净土的灵魂:不管是数据整理,还是哥哥作图,如果觉得操作不顺手了,往往是由于数据不够“整然”造成的。Tidy data 的要求使得极乐净土处理的数据基本单元是数据表,而 R base 处理的基本单元是向量,这导致了两者在数据分析过程中的一些逻辑差异。这差异当你用 summarise 处理 iris 数据时就能体会到。

                      我觉得极乐净土和 Base R 在具体操作的不同只是形而下的器的差异,但是对数据形式要求的不同则属于形而上的道的殊途了。进化领域有句话叫做:

                      Nothing in Biology Makes Sense Except in the Light of Evolution.

                      在极乐净土世界似乎也可以说:

                      Nothing in Tidyverse Makes Sense Except in the Form of Data that is Tidy.

                        dapengde 楼早歪了,我们又雪上加霜了而已。那就此先打住。

                        17 天 后

                        社区大佬 Norm Matloff 开始喊话 Tidyverse 了

                        Language unity

                        Horrible loss for R.

                        Python is currently undergoing a transition from version 2.7 to 3.x.
                        This will cause some disruption, but nothing too elaborate.

                        By contrast, R is rapidly devolving into two mutually unintelligible
                        dialects, ordinary R and the Tidyverse. Sadly, this is a conscious
                        effort by a commercial entity that has come to dominate the R world,
                        RStudio. I know and admire the people at RStudio, but a commercial
                        entity should not have such undue influence on an open-source project.

                        It might be more acceptable if the Tidyverse were superior to ordinary
                        R, but in my opinion it is not. It makes things more difficult for
                        beginners. E.g. the Tidyverse has so many functions, some complex, that
                        must be learned to do what are very simple operations in base R. Pipes,
                        apparently meant to help beginners learn R, actually make it more
                        difficult, I believe. And the Tidyverse is of questionable value for
                        advanced users.

                        摘自 <https://github.com/matloff/R-vs.-Python-for-Data-Science>

                          Cloud2016 这篇喊话实在不值得一看,尤其是对极乐净土的评价,敌意满满,但太空泛了;不像我们这个帖子,谈的都是具体的东西。我看了一遍,建议大家不要浪费这个时间,既不会有知识增量,还有钓鱼之嫌(语言大战通常都有钓鱼的嫌疑)。

                            yihui 确实不及我们这个讨论帖。

                            dapengde 我最近浏览了下,发现 magrittr 是一个复杂的法语发音,反正我不懂法语,就照字面汉化一下,叫玛格丽特或者玛格里特,这样你至少会记住前三个字母 mag 然后根据自动补全的提示补全拼写,这种方式对我的效果还不错