从data.table中删除多个列

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

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

以上工作正常,但

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

这看起来像一个可靠的,可重复的错误。 它已被提交为Bug#2791 。

看来,重复列试图删除后续的列。
如果没有列,则R崩溃。


更新 :现在在1.8.11版本中修复。 来自NEWS :

在同一个查询中分配两个相同的列现在在某些情况下是一个错误而不是崩溃; 例如DT [,c(“B”,“B”):= NULL](通过引用同一列删除两次)。 感谢里卡多( #2751 )和matt_k( #2791 )的报道。 添加了testing。

这个Q已经回答了,但是把它作为一个附注。

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

 DT[ ,`:=`(x = NULL, y = NULL)] 

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

 DT[ ,`:=`(x = letters, y = "Male")] 

这也检查重复的列名称。 所以试图放弃两次将会抛出一个错误信息。