“data.table”包中的“setDT”函数出现错误

3

看起来当你尝试在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   

已提交错误 #5661 - Arun
1个回答

1

提交 1320中,setDT现在会返回友好的错误提示,当它的绑定被锁定时,对象无法通过引用进行修改。来自NEWS,1.9.3版本的bug修复中的No:37:

setDT现在会提供友好的错误提示,当试图通过引用更改变量为data.table时,该变量的绑定已被锁定(通常是在包内,例如:CO2)。关闭#475。感谢David Arenburg在SO上报告此问题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接