我试图找出存储特定对象的实际内存要求。我尝试了两种方法:
object.size(obj)
save(obj, file = "obj.Rdata")
并检查文件大小。 .Rdata文件已经过压缩,所以它始终小于object.size()
返回的内容,直到我看到这个对象:
> object.size(out)
144792 bytes
> save(out, file = "out.Rdata")
# the file has 211 759 bytes
当我在新R中打开文件并运行object.size(out)
时,它再次报告144792个字节。
我不想在这里发布完整的对象,因为它包含封闭的数据,但我至少可以发布str输出(它是R2jags::jags
调用的输出 - 类{{1}的对象}):
rjags
答案 0 :(得分:9)
这种情况可能发生的一种方式是,如果对象具有需要与之保存的相关环境(如果有意义的话)。这种情况最常见于“闭包”(see here for one explanation)。
没有可重复的例子(并且没有自己使用R2jags
)我无法告诉你这是否是你的情况,但至少看起来似乎是合理的,因为:(a)关闭似乎成为这种情况的最常见原因; (b)根据str(out)
的输出,你的对象似乎包含一堆函数; (c)似乎这可能是组织像MCMC这样计算量大且可能并行化的过程的有用方法。
## Define a function "f" that returns a closure, here assigned to the object "y"
f <- function() {
x <- 1:1e6
function() 2*x
}
y <- f()
environment(y)
# <environment: 0x0000000008409ab8>
object.size(y)
# 1216 bytes
save(y, file="out.Rdata")
file.info("out.Rdata")$size
# [1] 2128554