数据框可以做什么而 tibble 不能?

J. *_*ini 8 r dataframe tibble

Tidyverse 的粉丝经常给出使用小标题而不是数据框的几个优点。它们中的大多数似乎旨在保护用户免于犯错误。例如,与数据框不同,小标题:

  • 不需要,drop=FALSE参数来不从数据中删除维度。
  • 不会让$操作员对列名进行部分匹配。
  • 仅当输入向量的长度正好为 1 时才回收它们。

我逐渐相信用小标题替换我所有的数据框。这样做的主要缺点是什么?更具体地说,数据框可以做什么而 tibble 不能?

先发制人,我想明确表示,我不是在询问data.table或对 Tidyverse 提出任何大局反对意见。我严格询问小标题和数据框。

Wal*_*ldi 3

tibbles 的麻烦中,你可以读到:

\n
\n

tibbles 确实没有\xe2\x80\x99t 的麻烦

\n
\n

然而,

\n
\n

一些较旧的软件包由于其替代的子集方法而无法使用 tibbles。他们期望 tib[,1]\n 返回一个向量,而实际上它现在将返回另一个 tibble。

\n
\n

这是@Henrik 在评论中指出的。

\n

例如,该length函数不会返回相同的结果:

\n
library(tibble)\ntibblecars <- as_tibble(mtcars)\ntibblecars[,"cyl"]\n#> # A tibble: 32 x 1\n#>      cyl\n#>    <dbl>\n#>  1     6\n#>  2     6\n#>  3     4\n#>  4     6\n#>  5     8\n#>  6     6\n#>  7     8\n#>  8     4\n#>  9     4\n#> 10     6\n#> # ... with 22 more rows\nlength(tibblecars[,"cyl"])\n#> [1] 1\nmtcars[,"cyl"]\n#>  [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\nlength(mtcars[,"cyl"])\n#> [1] 32\n
Run Code Online (Sandbox Code Playgroud)\n

其他示例:

\n\n

取子集和子赋值的不变量解释了 的行为与 的tibble不同之处data.frame

\n

已知这些限制,Hadley 给出的与遗留代码交互的解决方案是:

\n
\n

少数函数不使用 tibbles,因为它们期望 df[, 1] 返回向量,而不是数据框。如果您遇到以下函数之一,请使用 as.data.frame() 将 tibble 返回为数据框:

\n
\n