从data.table中删除多个列

mat*_*t_k 70 r data.table

从data.table中删除多个列的正确方法是什么?我目前正在使用下面的代码,但是当我不小心重复其中一个列名时,却出现了意外行为.我不确定这是不是一个bug,或者我不应该这样删除列.

library(data.table)
DT <- data.table(x = letters, y = letters, z = letters)
DT[ ,c("x","y") := NULL]
names(DT)
[1] "z"
Run Code Online (Sandbox Code Playgroud)

以上工作正常,但是

DT <- data.table(x = letters, y = letters, z = letters)
DT[ ,c("x","x") := NULL]
names(DT)
[1] "z"
Run Code Online (Sandbox Code Playgroud)

Ric*_*rta 36

这看起来像一个可靠的,可重现的bug.它已被提交为Bug#2791.

似乎重复该列会尝试删除后续列.
如果没有列,则R崩溃.


更新:现在修复于v1.8.11.来自新闻:

在同一查询中两次分配给同一列现在是错误而不是在某些情况下崩溃; 例如,DT [,c("B","B"):= NULL](通过引用删除两次相同的列).感谢Ricardo(#2751)和matt_k(#2791)的报道.测试补充说.


Pan*_*hah 15

这个Q已被回答,但认为这是一个附注.

我更喜欢以下语法删除多列

DT[ ,`:=`(x = NULL, y = NULL)]
Run Code Online (Sandbox Code Playgroud)

因为它匹配一个添加多个列(变量)

DT[ ,`:=`(x = letters, y = "Male")]
Run Code Online (Sandbox Code Playgroud)

这也检查重复的列名称.因此,尝试删除x两次将抛出错误消息.