为什么setDT在这种情况下没有任何影响?

Dav*_*urg 4 r data.table

请考虑以下代码

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不太关心对象的环境以便改变它的类.

是什么导致了上述行为?它只是一个错误或背后有一些常识吗?

sha*_*dow 5

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)