Tidyverse 的粉丝经常给出使用 tibbles 而不是数据帧的几个优点。其中大多数似乎都是为了保护用户免于犯错误而设计的。例如,与数据帧不同,tibbles:
- 不需要一个
,drop=FALSE
不从数据中删除维度的论点。
- 不会让
$
运算符对列名进行部分匹配。
- 仅当输入向量的长度恰好为 1 时才回收它们。
我逐渐确信用小标题替换我的所有数据框。这样做的主要缺点是什么?更具体地说,数据框能做什么而 tibble 不能做什么?
首先,我想澄清一下,我不是在问data.table
或任何对 Tidyverse 的总体反对意见。我严格询问有关 tibbles 和数据框的问题。
From tibbles 的麻烦 https://www.r-bloggers.com/2018/01/the-trouble-with-tibbles/, 你可以阅读 :
tibbles 确实没有任何问题
However,
一些较旧的软件包由于其替代的子集方法而无法使用 tibbles。他们期望 tib[1]
返回一个向量,而实际上它现在将返回另一个小标题。
这是@Henrik 在评论中指出的。
举个例子,length
函数不会返回相同的结果:
library(tibble)
tibblecars <- as_tibble(mtcars)
tibblecars[,"cyl"]
#> # A tibble: 32 x 1
#> cyl
#> <dbl>
#> 1 6
#> 2 6
#> 3 4
#> 4 6
#> 5 8
#> 6 6
#> 7 8
#> 8 4
#> 9 4
#> 10 6
#> # ... with 22 more rows
length(tibblecars[,"cyl"])
#> [1] 1
mtcars[,"cyl"]
#> [1] 6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4
length(mtcars[,"cyl"])
#> [1] 32
其他示例:
- base::reshape不使用 tibbles https://github.com/tidyverse/tibble/issues/231
取子集和子赋值的不变量 https://tibble.tidyverse.org/dev/articles/invariants.html解释了行为的来源tibble
不同于data.frame
.
这些限制是已知的,哈德利在与遗留代码交互 https://blog.rstudio.com/2016/03/24/tibble-1-0-0/ is:
少数函数不适用于 tibbles,因为它们期望 df[ 1] 返回向量,而不是数据框。如果您遇到以下函数之一,请使用 as.data.frame() 将 tibble 返回为数据框:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)