首页 > 解决方案 > 从磁盘加载 data.table 时,函数中的 data.table 分配失败

问题描述

我有一个函数通过引用已经存在的 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)

标签: rdata.table

解决方案


推荐阅读