我尝试使用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。