创建 tibble 时,
tbl <- tibble(A=1:5, B=6:10)
结果
class(tbl)
是
[1] "tbl_df" "tbl" "data.frame"
我已经习惯了看到这一点,因为我经常使用 dplyr。但是什么时候对象只是一个"tbl"(而不是"tbl_df"(反之亦然?我只是想更多地了解差异,如果有的话。
任何文档将不胜感激!
您可以将"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 本身中操作数据。
所以tbl
和tbl_df
之间并没有真正的"区别"。后者只是说tibble实际上是如何实现的,因此行为可以不同(更优化(。
有关更多信息,您可以查看 tibble 晕影或扩展 tibble 晕影