R data.table和序列化的奇怪行为
以下是一个简单、可重复的示例:R data.table和序列化的奇怪行为,r,serialization,data.table,R,Serialization,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'
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')
显然,数据
在上一个示例中以某种方式作为列表
的参考。原因是我没有在list()
中指定所有函数参数!奇怪
有人能复制和解释吗
data.table
version: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)
它似乎与
serialize
中的refhook
参数有关。请尝试打印(object.size(序列化(make3(),connection=NULL,refhook=function(e)”),单位为“Kb”)。与具有外部指针的data.tables有关,并序列化拾取要存储的数据。也看到
R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)