【发布时间】:2021-04-18 23:39:11
【问题描述】:
想请问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 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 在这种情况下抛出错误不是更好吗?
【问题讨论】:
-
听起来像bug report。
标签: r data.table