考虑下面的代码为什么setDT在这种情况下不起作用?
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"
的x
的class
仍然出于某种原因没有改变。
一种可能性是setDT
只更改类在全球环境中的对象,所以我试图
x <- data.frame(letters[1:2])
ftest <- function(x) setDT(x)
ftest(x)
class(x)
##[1] "data.table" "data.frame"
好像setDT
不那么在意对象的环境,以改变它的类。
那么是什么导致上述行为?它只是一个错误,或者它背后有一些常识吗?
你为什么想到,在''setDT x'”级(data.frame(X))'将被改为'data.table'? 'setDT'基本上与às.data.table'一样,但避免了大量的复制内容,这使得大数据更快。 – Beasterfield
@Beasterfield我期待它做些什么。如果不改变'x',则创建一个新的对象。否则,它应该通过一个错误或至少一个警告,它实际上没有做任何IMO。例如,如果你有'x < - factor(c(“1”,“2”)); x < - as.numeric(as.character(x))','setDT'应该在本例中扮演as.numeric'角色 –
@DavidArenburg,我认为问题在于setDT(data.frame x)),data.frame将x复制到一个新的data.frame对象中,所以setDT看不到原始的x,因此不能更改原始的x。 –