r - 从磁盘加载 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)
解决方案
推荐阅读
- if-statement - else if (!*p) 在这段代码中是什么意思
- botframework - 未捕获的类型错误:无法读取未定义的属性“renderWebChat”
- tabs - 赛普拉斯 - 无法打开指向新选项卡的按钮链接
- javascript - 在选定的 html 周围添加标签
- python - 如何查找值属于哪一行和哪一列?
- android - 如何使用各自的导航图设置多个嵌套的 FragmentContainerViews?
- mysql - mySQL——列出导演了多少部电影?
- oauth-2.0 - 使用 Azure DataLake Gen1 Connection 自动刷新本地表格模型
- javascript - 在深度级别的基础上链接孩子和父母
- php - 在docker容器上部署MVC-PHP代码并通过浏览器访问