请考虑以下代码
library(data.table) # 1.9.2
x <- data.frame(letters[1:2])
setDT(x)
class(x)
## [1] "data.table" "data.frame"
Run Code Online (Sandbox Code Playgroud)
这是预期的结果.现在,如果我跑
x <- letters[1:2]
setDT(data.frame(x))
class(x)
## [1] "character"
Run Code Online (Sandbox Code Playgroud)
由于某种原因class,它x保持不变.
一种可能性是setDT只更改全局环境中的对象类,所以我尝试过
x <- data.frame(letters[1:2])
ftest <- function(x) setDT(x)
ftest(x)
class(x)
##[1] "data.table" "data.frame"
Run Code Online (Sandbox Code Playgroud)
似乎setDT不太关心对象的环境以便改变它的类.
是什么导致了上述行为?它只是一个错误或背后有一些常识吗?
setDT改变data.frame并无形地返回它.由于你不保存它data.frame,它会丢失.你需要做的只是以某种方式保存data.frame,以便data.table保存.例如
setDT(y <- data.frame(x))
class(y)
## [1] "data.table" "data.frame"
Run Code Online (Sandbox Code Playgroud)
要么
z <- setDT(data.frame(x))
class(z)
## [1] "data.table" "data.frame"
Run Code Online (Sandbox Code Playgroud)