R:通过引用从data.table中删除列,而不使用名称

Foo*_*Bar 2 r data.table

几乎重复.我想从数据表中删除列,但我想有效地完成它.我有一个我想保留的列名列表.联系问题的所有答案都意味着做类似的事情

data.table.new <- data.table.old[, my.list]
Run Code Online (Sandbox Code Playgroud)

在某些关键点上会给我一个新对象,而旧对象仍在内存中.然而,我data.table.old是巨大的,因此我更喜欢通过引用来做到这一点,如此处所示

set(data.table.old, j = 'a', value = NULL)
Run Code Online (Sandbox Code Playgroud)

但是,由于我有列的白名单,而不是黑名单,我需要遍历所有列名,检查它们是否在my.list,然后应用set().有没有更清洁/其他方式这样做?

jan*_*cki 6

不确定是否可以通过 data.frame上的引用操作来完成而不使其成为data.table.
如果您考虑使用data.table,下面的代码应该可行.

library(data.table)
setDT(data.frame.old)
dropcols <- names(data.frame.old)[!names(data.frame.old) %in% my.list]
data.frame.old[, c(dropcols) := NULL]
Run Code Online (Sandbox Code Playgroud)