Data.table设置函数不丢弃列

时间:2017-08-04 18:09:01

标签: r data.table

我尝试使用set函数从data.table中删除列,但发现并非所有列都被删除,但未报告任何警告或错误。

library(data.table)
dt <- data.table(iris)
drop.vars <- names(dt)[1:3]

for (colName in names(dt)) {
  if (colName %in% drop.vars)
    set(dt, j = colName, value = NULL)
}

any(names(dt) %in% drop.vars)

我希望any返回FALSE,但它实际上返回TRUE。如果我多次运行循环,它会在2-3次运行后删除drop.vars中的所有列(取决于原始data.table的大小)。

我最终最终使用了不同的配方

    set(dt, j = which(colName %in% drop.vars), value = NULL)

,按预期删除了列。但是,有人可以解释为什么在for循环中使用set并不能按预期工作吗?

这是在R 3.4.0上使用data.table 1.10.4以及在MRO 3.4.0上进行测试,开发版本为1.10.5。

0 个答案:

没有答案