r - data.table 和序列化的奇怪行为
问题描述
这是一个简单的、可重现的示例:
fobj1 <- function(a, b) {
list(a)
}
make1 <- function() {
data <- data.table::data.table(1:1e8)
a <- 1; b <- 2
fobj1(a, b)
}
tmp <- make1()
print(object.size(serialize(tmp, connection = NULL)), units = 'Kb')
fobj2 <- function(a, b) {
f <- function() {NULL}
list(a, b, 'f' = f)
}
make2 <- function() {
data <- data.table::data.table(1:1e8)
a <- 1; b <- 2
fobj2(a, b)
}
tmp <- make2()
print(object.size(serialize(tmp, connection = NULL)), units = 'Kb')
fobj3 <- function(a, b) {
f <- function() {NULL}
list(a, 'f' = f)
}
make3 <- function() {
data <- data.table::data.table(1:1e8)
a <- 1; b <- 2
fobj3(a, b)
}
tmp <- make3()
print(object.size(serialize(tmp, connection = NULL)), units = 'Kb')
如果我来源这个,结果是:
0.1 Kb
22.6 Kb
390647.9 Kb
显然,data
以某种方式作为list
上一个示例中的参考。原因是我没有在list()
! 诡异的?!?
有人可以复制和解释吗?
data.table
版本:data.table_1.12.4
R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
解决方案
推荐阅读
- c# - c# for循环中的等待
- c# - 启用属性路由,没有默认路由,为什么我的 API 仍然返回旧的默认路由?
- cakephp-3.0 - 如何使用自己的元素文件而不是 Bootstrap-ui 的默认值 CakePHP 3?
- cmake - 使用 CMAKE 构建时,INCLUDE 找不到加载文件
- c - 指向二维数组的指针
- php - 失败:在 PHPmailer 中使用静态函数
- javascript - WooCommerce 动态产品定价 [前端到购物车]
- reactjs - React - TypeError:当我尝试注入函数时无法读取未定义的属性
- python - 从数组中删除数组
- django - Django 表单字段不需要 asterix 在不应该的时候仍然存在