【问题标题】:Error in `setDT` from `data.table` package`data.table` 包中的`setDT` 出错
【发布时间】:2014-06-15 04:18:36
【问题描述】:

似乎setDT 在您尝试在datasets 包中的存储数据上运行它时会返回错误。例如

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   

【问题讨论】:

标签: r data.table environment


【解决方案1】:

使用commit 1320setDT 现在返回一个友好的错误,即当对象的绑定被锁定时,无法通过引用进行修改。来自NEWS,No:37 在 1.9.3 的错误修复下:

setDT 现在在尝试通过绑定被锁定的引用将变量更改为 data.table 时提供一个友好的错误(通常当变量位于包中时,例如:CO2)。关闭#475。感谢 David Arenburg 在 SO 上提交报告 here

【讨论】:

    猜你喜欢
    • 2015-04-08
    • 2021-12-31
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 2017-06-14
    • 2019-02-09
    • 2020-05-03
    • 2017-06-25
    相关资源
    最近更新 更多