考虑以下代码
library(data.table) # 1.9.2
x <- data.frame(letters[1:2])
setDT(x)
class(x)
## [1] "data.table" "data.frame"
这是预期的结果。现在如果我跑
x <- letters[1:2]
setDT(data.frame(x))
class(x)
## [1] "character"
class
的{{1}}由于某种原因保持不变。
一种可能性是x
只更改了全局环境中的对象类,所以我试过了
setDT
似乎x <- data.frame(letters[1:2])
ftest <- function(x) setDT(x)
ftest(x)
class(x)
##[1] "data.table" "data.frame"
并不关心对象的环境以改变其类。
那导致上述行为的原因是什么?它只是一个错误还是背后有一些常识?
答案 0 :(得分:5)
setDT
更改data.frame
并无形地返回它。由于您没有保存此data.frame
,因此会丢失。您需要做的只是保存data.frame
,以便data.table
也被保存。例如。
setDT(y <- data.frame(x))
class(y)
## [1] "data.table" "data.frame"
或
z <- setDT(data.frame(x))
class(z)
## [1] "data.table" "data.frame"