【发布时间】:2021-03-03 23:55:27
【问题描述】:
Tidyverse 的粉丝经常给出使用 tibbles 而不是数据框的几个优点。它们中的大多数似乎旨在保护用户免于犯错。例如,与数据帧不同的是,tibbles:
- 不需要
,drop=FALSE参数即可不从数据中删除维度。 - 不会让
$运算符对列名进行部分匹配。 - 仅当输入向量的长度正好为 1 时才回收它们。
我逐渐确信将我所有的数据框都替换为 tibbles。这样做的主要缺点是什么?更具体地说,数据框可以做什么而 tibble 不能?
首先,我想明确表示我不是在询问data.table 或对 Tidyverse 的任何宏观反对意见。我严格要求 tibbles 和数据框。
【问题讨论】:
-
Tibbles 是数据框 - 即它们有
data.frame类,只是带有其他方法。因此,与其说数据框有什么不同,不如说 tibble 如何修改数据框的行为。差异在tibbles vignette 中捕获。个人认为修改后的print方法是最有用的功能。 -
不是一个答案,而是关于 R-package-devel 的一个很长的有趣线程,其中有几个 R 权威讨论了 tibbles 的一些含义:tibbles are not data frames。无论如何,Jim Lemon 将老虎纳入综合格斗比赛的比喻值得一读。
-
@Henrik 当然读起来很有趣,但总结似乎很简单,就像“小标题违反了 Liskov 替换原则”。
-
我发现 tibbles 缺少的一件事是行名。虽然这是设计使然,但在计算距离时有时会有点烦人。使用
tibble::column_to_rownames()确实有效,但将类型更改回data.frame