我有一个函数,它通过引用一个已经存在的data.table进行赋值。该函数在创建data.table并将其输入到函数中时起作用,但是在将数据集保存到磁盘,重新加载并运行相同的函数时不起作用。但是,如果在新加载的data.table上执行setDT()(或进行赋值),然后运行该函数,则该函数可以正常工作。这里发生了什么?为什么在使用此功能之前我们需要“重置” data.table?
library(data.table)
file.path <- "H:/mydt.RDS"
make_col <- function(dt) {
dt[ , z := 1]
}
# this works
mydt <- data.table(a = 1:3)
make_col(mydt)
# but if we save and load the saved copy...
mydt <- data.table(a = 1:3)
saveRDS(mydt, file.path)
# this doesn't work
mydt <- readRDS(file.path)
make_col(mydt)
# but this works
mydt <- readRDS(file.path)
setDT(mydt)
make_col(mydt)
# and so does this
mydt <- readRDS(file.path)
mydt[ , b := 1]
make_col(mydt)
# and so does this
mydt <- readRDS(file.path)
mydt2 <- copy(mydt)
make_col(mydt2)