考虑以下代码

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"
classx 由于某种原因保持不变。

一种可能性是 setDT 只改变全局环境中的对象类,所以我试过了
x <- data.frame(letters[1:2])
ftest <- function(x) setDT(x)
ftest(x)
class(x)
##[1] "data.table" "data.frame"

似乎 setDT 不太关心对象的环境以更改其类。

那么是什么导致了上述行为?这只是一个错误还是背后有一些常识?

最佳答案

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"

关于r - 为什么在这种情况下 setDT 没有任何影响?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24426164/

10-09 06:41