数据表中setkeyv出现异常错误

6

我很熟悉data.table,但在setkeyv函数中遇到了一个奇怪的错误,无法解决。

这个错误非常简单:

keycols<-c("A", "B")
DT <- data.table(A=1:10, B=91:90)
setkeyv(DT, keycols)
# Error in setkeyv(x, cols, verbose = verbose, physical = physical) : 
#   4 arguments passed to .Internal(nchar) which requires 3

供参考,这是我的 sessionInfo()

R version 3.2.0 (2015-04-16)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

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] cvTools_0.3.2     robustbase_0.92-4 lattice_0.20-31   kernlab_0.9-20    rstan_2.6.0       inline_0.3.14     Rcpp_0.11.6       data.table_1.9.4 

loaded via a namespace (and not attached):
 [1] chron_2.3-47   grid_3.2.0     plyr_1.8.3     stats4_3.2.0   magrittr_1.5   stringi_0.5-4  reshape2_1.4.1 tools_3.2.0    stringr_1.0.0 
[10] DEoptimR_1.0-2

我也使用R 3.2.0和data.table 1.9.4,它对我来说很好用。也许是你的其他软件包出了问题。 - Frank
1
data.table 1.9.4 在我使用 R 3.2.0 时运行良好。然后,我开始在 ggplot 和 data.table 中遇到奇怪的错误(关于初始化循环失败的问题)。我选择性地更新了一些包,然后 data.table 就停止工作了。感觉像是某些东西被损坏了。升级到 R 3.2.1 也解决了我的问题。 - geneorama
1个回答

10

我无法解释为什么会出现这种情况,但将R 3.2.1版本升级并安装每个软件包的最新版本即可解决问题。供参考,这是我的sessionInfo()更新后的内容:

R version 3.2.1 (2015-06-18)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

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] kernlab_0.9-20    rstan_2.6.0       inline_0.3.14     Rcpp_0.11.6       cvTools_0.3.2     robustbase_0.92-4 lattice_0.20-31   data.table_1.9.4 

loaded via a namespace (and not attached):
 [1] chron_2.3-47   grid_3.2.1     plyr_1.8.3     stats4_3.2.1   magrittr_1.5   stringi_0.5-4  reshape2_1.4.1 tools_3.2.1    stringr_1.0.0 
[10] DEoptimR_1.0-2

1
似乎问题出在nchar函数上。请参考新特性中的第三点。 - Andriy T.
+1 这是来自2015年6月的v1.9.4版本,在2015年9月的CRAN上发布了v1.9.6之前。我使用所述的依赖关系(R 2.14.1)测试了v1.9.6,因此我认为只要您拥有1.9.6,它应该在R 3.2.1中的nchar更改之前和之后都能正常工作,这是@AndriyT.指出的。我添加了[#1370](https://github.com/Rdatatable/data.table/issues/1370),以再次检查setkeyv测试。 - Matt Dowle
提供的解释在这里:https://dev59.com/zFwY5IYBdhLWcg3wLFOw#32959306,但我不确定。感谢@AndriyT.上面的提示。 - Matt Dowle
@MattDowle,感谢你提供更广泛的解释和良好的回答。顺便说一下,我的评论中的链接现在似乎不存在了。这是一个相似的链接 - Andriy T.
1
@AndriyT。好的。这是来自CRAN主页的稳定链接(CRAN主页上的“What's new?”链接):https://cran.r-project.org/doc/manuals/r-release/NEWS.html - Matt Dowle

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