data.table切换列名

JS1204

我想问一下以下行为data.table是功能还是错误。

鉴于 data.table

dt = data.table(
  group = c(rep('group1',5),rep('group2',5)),
  x = as.numeric(c(1:5, 1:5)),
  y = as.numeric(c(5:1, 5:1)),
  z = as.numeric(c(1,2,3,2,1, 1,2,3,2,1))
)

和包含重复项的列名向量,

cols = c('y','x','y','z') # contains a duplicate column name

data.table 正确地阻止了我为重复的列名分配值:

dt[,(cols) := lapply(.SD,identity), .SDcols=cols] # Error (OK)

对我来说,这似乎是适当的行为,因为它可以帮助避免意外的后果。但是,如果我按组进行相同的作业,

dt[,(cols) := lapply(.SD,identity), .SDcols=cols, by=group] # No error!

那么data.table就不会抛出错误。分配经过,以及一个可以验证列y,并z已经互换。

对于我来说,这是在大型应用程序中发生的,同时按组定义了变量,因此很难找到此行为的根源。对于用户的建议当然是避免在分配时重复列名称,并避免向提供重复名称.SDcols但是,data.table在这种情况下抛出错误会更好吗?

JS1204

这是一个错误,已在的1.12.4版中修复data.table这是错误报告:https : //github.com/Rdatatable/data.table/issues/4874

遇到此问题的其他用户可以简单地更新其软件包版本,例如使用install.packages('data.table')要检查当前软件包的版本,请加载data.table,然后查看的输出sessionInfo()

但是,最好避免提供重复的列名.SDcols

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章