首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >data.table开关列名

data.table开关列名
EN

Stack Overflow用户
提问于 2021-01-14 06:30:57
回答 1查看 55关注 0票数 6

我想问一下data.table的以下行为是一个特性还是一个bug。

给定data.table

代码语言:javascript
复制
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))
)

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

代码语言:javascript
复制
cols = c('y','x','y','z') # contains a duplicate column name

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

代码语言:javascript
复制
dt[,(cols) := lapply(.SD,identity), .SDcols=cols] # Error (OK)

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

代码语言:javascript
复制
dt[,(cols) := lapply(.SD,identity), .SDcols=cols, by=group] # No error!

那么data.table就不会抛出错误。赋值完成后,可以验证列yz是否已互换。

当我在一个大型应用程序中对变量进行分组降级时,这种情况就会发生,而且很难追踪这种行为的根源。当然,对用户的建议是在赋值时避免重复的列名,并避免向.SDcols提供重复的列名。然而,对于data.table来说,在这种情况下抛出错误不是更好吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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提供重复的列名。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65710734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档