使用 tidyverse 有什么缺点吗?

J. *_*ini 2 r tidyverse

对于与在 R 中处理数据相关的任何事情,我最近看到 tidyverse 被推荐为几乎必不可少的。这就提出了一个问题——如果它只是被大肆宣传,是否有任何理由不使用它?例如,tidyverse 中的框架是否有任何值得一提的限制?

mac*_*ine 8

第一个缺点:稳定性

一个缺点是tidyverse函数的变化比baseR快。所以如果你想要长时间的稳定性,我会选择基础 R。也就是说,tidyverse开发人员对他们的不同方法持开放态度。参见例如欢迎来到 Tidyverse 小插图

[ baseR 和 tidyverse之间]的最大区别在于优先级:基础 R 高度关注稳定性,而 tidyverse 将在寻找更好的界面时进行重大更改。

...还有哈德利对你是否希望 tidyverse 有一天成为核心 R 包的一部分的回答

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

第二个缺点:灵活性

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

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

由于行号更改,因此会出现错误。有时我会遇到这样的情况,mutate抱怨行号不一样。例如,这与summarise每列仅期望长度为 1 的情况类似range。当然有解决方法,但我更喜欢这里的基本 R

apply(data.frame(matrix(rnorm(1000), ncol= 10)), 2, function(i) density(i)$x)
Run Code Online (Sandbox Code Playgroud)

第三个缺点:复杂

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

df[df$age > 90, ] <- NA
Run Code Online (Sandbox Code Playgroud)

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

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

两个答案都有效,但显然不像使用基础 R 那样快速编码。

为什么这个问题不应该关闭

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