我想问一下data.table的以下行为是一个特性还是一个bug。
给定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 namedata.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来说,在这种情况下抛出错误不是更好吗?
发布于 2021-01-20 23:36:24
这是一个错误,已在1.12.4版的data.table中修复。这是错误报告:https://github.com/Rdatatable/data.table/issues/4874。
其他有此问题的用户可以简单地更新他们的包版本,例如使用install.packages('data.table')。要检查当前包的版本,请加载data.table,然后查看sessionInfo()的输出。
但明智的做法是避免向.SDcols提供重复的列名。
https://stackoverflow.com/questions/65710734
复制相似问题