通过常规方式(例如ll["name"] <- NULL
)从列表中删除元素会导致整个列表被复制。通常,这并不明显,直到数据集变得很大。
我有一个包含十几个元素的列表,每个元素的大小在 0.25 ~ 2 GB 之间。从这个列表中删除三个元素大约需要十分钟才能执行(在相对较快的机器上)。
有没有办法就地从列表中删除元素?
我尝试了以下方法:
TEST <- list(A=1:20, B=1:5)
TEST[["B"]] <- NULL
TEST["B"] <- NULL
TEST <- TEST[c(TRUE, FALSE)]
data.table::set(TEST, "B", value=NULL) # ERROR
输出内存信息:
cat("\n\n\nATTEMPT 1\n")
TEST <- list(A=1:20, B=1:5)
.Internal(inspect(TEST))
TEST[["B"]] <- NULL
.Internal(inspect(TEST))
cat("\n\n\nATTEMPT 2\n")
TEST <- list(A=1:20, B=1:5)
.Internal(inspect(TEST))
TEST["B"] <- NULL
.Internal(inspect(TEST))
cat("\n\n\nATTEMPT 3\n")
TEST <- list(A=1:20, B=1:5)
.Internal(inspect(TEST))
TEST <- TEST[c(TRUE, FALSE)]