创建小标题时,
a = np.empty(2, np.object)
class A(float):
pass
a[0] = a[1] = A()
print(type(a[0])) # <class '__main__.A'>
a[...] = A()
print(type(a[0])) # <class 'float'>
的结果
tbl <- tibble(A=1:5, B=6:10)
是
class(tbl)
由于我经常使用dplyr,因此我经常看到这种情况。但是什么时候对象只是一个“ tbl”(而不是“ tbl_df”),反之亦然?我想进一步了解两者之间的区别(如果有)。
任何文档将不胜感激!
答案 0 :(得分:7)
您可以将“ tibble”视为界面。如果对象可以响应所有微动动作,则可以将其视为微动。 R没有强类型。
因此tbl
是通用小标题,而tbl_df
是一种特定类型的小标题,基本上将其数据存储在data.frame中。
还有其他类似dtplyr
的程序包,它们允许您像小玩意儿一样将数据存储在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"
因此,我们再次看到,该事物通常可以充当小标题,但是它具有其他类,以便它可以尝试完成数据库引擎中的所有工作,而不是操纵R本身中的数据。 / p>
因此tbl
与tbl_df
之间并没有真正的“区别”。后者只是说明小标题的实际实现方式,因此行为可以有所不同(可以进行更优化)。
有关更多信息,您可以签出tibble vignette或extending tibble vignette