【问题标题】:In the tidyverse, what is the difference between an object of class "tbl" and "tbl_df"?在 tidyverse 中,“tbl”和“tbl_df”类的对象有什么区别?
【发布时间】:2019-01-15 21:28:14
【问题描述】:

创建小标题时,

tbl <- tibble(A=1:5, B=6:10)

结果

class(tbl)

[1] "tbl_df"     "tbl"        "data.frame"

我已经习惯了这种情况,因为我经常使用 dplyr。但是什么时候一个对象只是一个“tbl”(而不是一个“tbl_df”),反之亦然?如果有的话,我只想了解更多有关差异的信息。

任何文档将不胜感激!

【问题讨论】:

    标签: r dplyr tibble


    【解决方案1】:

    您可以将“tibble”视为一个界面。如果一个对象可以响应所有 tibble 动作,那么您可以将其视为一个 tibble。 R 没有强类型。

    所以tbl 是通用 tibble,tbl_df 是一种特定类型的 tibble,它基本上将其数据存储在 data.frame 中。

    还有像 dtplyr 这样的其他软件包,它们允许您像 tibble 一样操作,但将您的数据存储在 data.table 中。例如

    library(dtplyr)
    ds <- tbl_dt(mtcars)
    class(ds)
    # [1] "tbl_dt"     "tbl"        "data.table" "data.frame"
    

    还有dbplyr 包允许您使用SQL 数据库后端。例如

    library(dplyr)
    con <- DBI::dbConnect(RSQLite::SQLite(), path = ":memory:")
    copy_to(con, mtcars, "mtcars",temporary = FALSE)
    cars_db <- tbl(con, "mtcars")
    class(cars_db)
    # [1] "tbl_dbi"  "tbl_sql"  "tbl_lazy" "tbl"  
    

    所以我们再次看到这个东西通常可以作为一个 tibble,但它还有其他类,因此它可以尝试在数据库引擎中完成所有工作,而不是在 R 本身中操作数据。

    所以tbltbl_df 之间并没有真正的“区别”。后者只是说明 tibble 是如何实际实现的,因此行为可能会有所不同(更优化)。

    欲了解更多信息,您可以查看tibble vignetteextending tibble vignette

    【讨论】:

      猜你喜欢
      • 2017-10-12
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-06
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多