代码之家  ›  专栏  ›  技术社区  ›  J. Mini

数据帧能做什么而tible不能?

  •  1
  • J. Mini  · 技术社区  · 3 年前

    Tidyverse的粉丝们经常给出使用tibbles而不是数据帧的几个优点。它们中的大多数似乎是为了保护用户不犯错误而设计的。例如,与数据帧不同,tibbles:

    • 不需要一个 ,drop=FALSE 参数不从数据中删除维度。
    • 不会让 $
    • 只有当输入向量的长度正好为1时,才能循环使用它们。

    我逐渐确信要用tibbles替换我所有的数据帧。这样做的主要缺点是什么?更具体地说,一个数据帧能做什么而tible不能?

    data.table 或是对提迪沃斯的任何反对意见。我是严格要求关于tibles和数据帧。

    1 回复  |  直到 3 年前
        1
  •  3
  •   Waldi    3 年前

    the trouble with tibbles ,您可以阅读:

    然而,

    一些旧的软件包不能与tibles一起工作,因为它们有替代的子设置方法。他们期望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
    

    Invariants for subsetting and subassignment 解释了行为的来源 tibble 不同于 data.frame .

    已知这些局限性,Hadley在 interacting with legacy code 是:

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

        2
  •  0
  •   TarJae    3 年前

    在此学习: https://cran.r-project.org/web/packages/tibble/vignettes/tibble.html

    tibbles和数据帧之间有三个关键区别:

    • 印刷
    • 子集
    • 回收规则

    藏品:

    • 决不更改输入类型(即不再更改输入)= 错误!)
    • 永远不要调整变量的名称
    • 按顺序缓慢地计算参数
    • 仅循环长度为1的向量

    大数据帧以尽可能多的行显示,直到内存缓冲区被淹没。在这种情况下,R将在数据帧的任意部分停止。

    在tibble格式中,仅显示前十行和所有拟合列。 列数据类型和数据集的大小也会显示出来。