我注意到data.table
程序包的一项功能,该功能可能以某种方式与该程序包的智能内存分配有关。我想在现有数据库中创建一个新的data.table,并从新数据库中删除列。但是,:= NULL
routine会从两个data.tables中删除列,而无需我特别要求。
library(data.table)
dt1 <- data.table(A = rnorm(10,5,6), B = rnorm(10,2,1), C = rnorm(10,10,2))
dt2 <- dt1
names(dt1)
names(dt2)
dt2[, c("B", "C") := NULL]
names(dt2) # Expected
# [1] "A"
names(dt1) # Weird!
# [1] "A"
我目前避免这种情况的解决方案是将data.table转换为data.frame,删除列,然后将其转换回data.table:
dt1 <- data.table(A = rnorm(10,5,6), B = rnorm(10,2,1), C = rnorm(10,10,2))
dt2 <- as.data.frame(dt1)
dt2 <- as.data.table(dt2[!names(dt2) %in% c("B", "C")])
names(dt1) # Expected
# [1] "A" "B" "C"
names(dt2) # Expected
# [1] "A"
必须有一种更直观,内存和代码有效的方式来执行此操作。有什么建议吗?
答案 0 :(得分:2)
您应该使用
dt2 <- copy(dt1)