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

时间:2014-06-26 08:48:49

标签: r data.table

考虑以下代码

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" 并不关心对象的环境以改变其类。

那导致上述行为的原因是什么?它只是一个错误还是背后有一些常识?

1 个答案:

答案 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"