在tidyverse中,类"tbl"和"tbl_df"的对象之间有什么区别?

Al *_* R. 0 r dplyr tibble

创建一个tibble时,

tbl <- tibble(A=1:5, B=6:10)
Run Code Online (Sandbox Code Playgroud)

的结果

class(tbl)
Run Code Online (Sandbox Code Playgroud)

是

[1] "tbl_df"     "tbl"        "data.frame"
Run Code Online (Sandbox Code Playgroud)

我习惯看到这个,因为我使用dplyr相当多.但是什么时候对象只是一个"tbl"(而不是"tbl_df"),反之亦然?我想知道更多关于差异的信息,如果有的话.

任何文件将不胜感激!

MrF*_*ick 8

您可以将"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"
Run Code Online (Sandbox Code Playgroud)

还有一个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"  
Run Code Online (Sandbox Code Playgroud)

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

因此,tbl和之间并没有真正的"差异" tbl_df.后者只是说实际上如何实现tibble,因此行为可以不同(更优化).

有关更多信息,您可以查看tibble插图或扩展的tibble插图