r - 使用 tidyverse 有什么缺点吗?
问题描述
对于任何与在 R 中处理数据相关的事情,我最近一直认为 tidyverse 几乎是必不可少的。这就提出了一个问题——如果这就是它所宣传的一切,有什么理由不使用它吗?例如,tidyverse 中的框架是否有任何值得一提的限制?
解决方案
第一个缺点:稳定性
一个缺点是tidyverse
函数的变化比 R 更快base
。因此,如果您想要长期稳定,我会选择基本 R。也就是说,tidyverse
开发人员对他们的不同方法持开放态度。参见例如欢迎来到 Tidyverse 小插曲:
[R 和 tidyverse 之间] 的最大区别在于
base
优先级:基础 R 高度关注稳定性,而 tidyverse 将在寻找更好的界面时做出重大改变。
...以及 Hadley 对您是否希望 tidyverse 有朝一日成为核心 R 软件包的一部分的回答?
这是极不可能的,因为核心包非常保守,因此
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 可以工作,但要麻烦得多。前段时间我问了一个问题如何做这个代码
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 <- function(x) ...
,它function
本身就是一个base
R 函数,据我所知没有tidyverse
对应的函数。有很多例子表明base
R 函数没有等效的 tidyverse,而且可能永远不会有,例如rnorm
、eval
、c
等等。事实上,这并不是一个缺点,tidyverse
但它表明了这一点,tidyverse
并且base
对不同的事物都有好处,这就是为什么你应该同时学习两者的原因。
为什么这个问题不应该被关闭
该问题已作为副本关闭,并链接到另一个关于 tidyverse 与 data.table 的问题。在我看来,如果有人询问 tidyverse(或任何其他包)的缺点,这并不意味着该人要求与 data.table 包进行比较。相反,通过将 tidyverse 与链接问题中未完成的R 基础进行比较来更明显地说明 tidyverse 的缺点,例如,此问题不是重复的。
推荐阅读
- c# - 将 Json 键转换为小写
- java - SAPUI5 servlet 调用 pdf
- javascript - Firebase 注册 - 异步功能不起作用
- java - 如何从android的内部存储中获取.mp3文件
- java - Java8 Apache Http 客户端 4.5.12 - SocketException
- python-xarray - xarray 如何使用 open_rasterio 加载和索引大型 GeoTIFF 文件?
- bash - 如何使用&符号'&'命令在许多目录中多次执行此查找命令?
- python - 使用 python 抓取网站
- javascript - 如何让 setState 在功能性 React 组件的事件处理程序中工作
- javascript - 将“onclick”属性添加到 javascript 函数中的按钮