【问题标题】:Are there any disadvantages to using tidyverse? [duplicate]使用 tidyverse 有什么缺点吗? [复制]
【发布时间】:2020-08-07 03:21:07
【问题描述】:

对于任何与在 R 中处理数据相关的事情,我最近一直认为 tidyverse 几乎是必不可少的。这就提出了一个问题——如果这就是它所宣传的一切,有什么理由不使用它吗?例如,tidyverse 中的框架是否有任何值得一提的限制?

【问题讨论】:

  • @IanCampbell 我相信这只是 tidyverse 的一小部分。
  • 参见:Norman Matloff 的优秀论文,Tidyverse Skeptic
  • @LenGreski 太好了。最重要的是,我很高兴确认 ggplot2 与 tibbles 之类的东西无关。

标签: r tidyverse


【解决方案1】:

第一个缺点:稳定性

一个缺点是tidyverse 函数的变化比base R 更快。因此,如果您想要长期稳定,我会选择base R。也就是说,tidyverse 开发人员对他们的开发持开放态度不同的方法。参见例如Welcome to the Tidyverse vignette:

[base R 和 tidyverse 之间] 的最大区别在于优先级:base R 高度关注稳定性,而 tidyverse 会在寻找更好的界面时做出重大改变。

...哈德利对Do you expect the tidyverse to be the part of core R packages some day?的回答

这是极不可能的,因为核心包非常保守,所以base R 代码是稳定的,并且向后兼容。我更喜欢采用更乌托邦式的方法,在尝试找出更好的 API 的同时,我可以非常积极地进行向后不兼容的更改。

第二个缺点:灵活性

整洁的数据概念很棒,但在转换后具有与以前相同的行号(参见mutate)并不总是可能的。参见示例

library(tidyverse)
data.frame(matrix(rnorm(1000), ncol= 10)) %>%
mutate_all(function(i) density(i)$x)

由于行号更改而导致错误。有时我会遇到mutate 抱怨行号不一样的情况。与summarise 类似,它期望每列只有一个长度,例如range 不是这种情况。当然,有一些解决方法,但我更喜欢这里的基本 R

apply(data.frame(matrix(rnorm(1000), ncol= 10)), 2, function(i) density(i)$x)

第三个缺点:复杂性

在某些情况下,tidyverse 可以工作,但要麻烦得多。前段时间问了一个question这个代码怎么做

df[df$age > 90, ] <- NA

... 在 tidyverse 和建议使用的两个答案中

df %>% select(x, y, age) %>% mutate_all(~replace(.x, age> 90, NA))
# or
df %>% mutate_all(function(i) replace(i, .$age> 90, NA))

这两个答案都有效,但显然不如使用基本 R 编码。

第四个缺点:局限性

如果你想定义你自己的函数,你可以做类似my_fun &lt;- function(x) ... 的事情,其中​​function 本身是一个base R 函数,据我所知没有tidyverse 对应物。有很多例子,base R 函数没有 tidyverse 等价物,而且可能永远不会有,例如rnormevalc 等等。事实上,这并不是tidyverse 的缺点,但它表明tidyversebase 对不同的事物都有好处,这就是为什么你应该同时学习两者。

为什么不应该结束这个问题

该问题已作为重复问题关闭,并链接到另一个关于 tidyverse 与 data.table 的问题。在我看来,如果有人询问 tidyverse(或任何其他包)的缺点,这并不意味着该人要求与 data.table 包进行比较。相反,通过将 tidyverse 与链接问题中 not 完成的 R base 进行比较,可以更明显地看出 tidyverse 的缺点,例如这个问题不是重复的。

【讨论】:

  • 很好的解释。许多 tidyverse 函数也比它们的 Base R 对应物慢得多。另一点,基本 R 函数的复制在某种程度上分裂了语言——这也是我如此喜欢 R 的原因之一(有很多方法可以给猫剥皮)——但是重复使得学习 R学习很多功能的问题。我相信您已经看到了使用 Base、Tidyverse 和 data.table 回答问题的方法。当我担任大学导师时,本科生有时难以应对大量的做某事的方法。
猜你喜欢
  • 2016-03-30
  • 2014-08-28
  • 1970-01-01
  • 2011-01-21
  • 2016-01-14
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 2011-04-26
相关资源
最近更新 更多