看起来当你尝试在datasets
包中运行它时,setDT
会返回一个错误。例如:
library(data.table)
setDT(CO2)
## Error in assign(name, x, parent.frame(), inherits = TRUE) :
## cannot change value of locked binding for 'CO2'
最奇怪的事情是,如果您重新运行 setDT(CO2)
,它就可以正常工作。
所以我查看了 setDT
的源代码并尝试重现这个错误。
x <- CO2
name <- as.character(substitute(x))
assign(name, x, parent.frame(), inherits = TRUE)
哪些是正常的且没有返回任何错误。我猜测parent.frame()
可能是导致问题的原因,但是我自己无法弄清楚后台发生了什么。此外,我不明白为什么第二次运行setDT(CO2)
不会返回错误。
我的sessionInfo()
:
## R version 3.0.3 (2014-03-06)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
##
## locale:
## [1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252
## [4] LC_NUMERIC=C LC_TIME=English_United States.1252
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] data.table_1.9.2
##
## loaded via a namespace (and not attached):
## [1] plyr_1.8 reshape2_1.2.2 stringr_0.6.2 tools_3.0.3