【发布时间】:2019-10-02 08:23:42
【问题描述】:
似乎有一些dplyr 函数,包括mutate_if、mutate_all、mutate_at 等强制data.table 输入到data.frame。这似乎是一种奇怪的行为,尽管它记录在 ?mutate_all 中(在“价值”下,它说“data.frame” - 但它不会强制将 tibbles 转换为 data.frames。)
require(dplyr)
require(data.table)
data("iris")
dt <- as.data.table(iris)
class(dt)
#[1] "data.table" "data.frame"
class(mutate_if(dt, is.numeric, as.numeric))
#[1] "data.frame"
但是,小标题不会发生这种情况:
tb <- as_tibble(iris)
class(tb)
#[1] "tbl_df" "tbl" "data.frame"
class(mutate_if(tb, is.numeric, as.numeric))
#[1] "tbl_df" "tbl" "data.frame"
有什么方法可以维护 data.table,还是每次我使用一个作用域 mutate 函数时都需要强制使用 as.data.table?
【问题讨论】:
-
根据文档,dplyr 函数尝试返回与输入相同类型的对象。由于
data.table不是基类,所以它返回data.frame -
tbl_df 也不是基类。
-
dplyr 旨在与 tibbles 一起使用。
-
我从未测试过这个,但也许检查this package
-
感谢@DavidArenburg。 dtplyr 包似乎需要一点点温柔、关爱——我尝试安装它并重试我的 reprex,但我得到的只是错误。我实际上认为 data.table 作为后端是内置在 dplyr 中的。
标签: r dplyr data.table tibble