object.size()报告的大小小于.Rdata文件

时间:2014-02-17 18:37:31

标签: r

我试图找出存储特定对象的实际内存要求。我尝试了两种方法:

  • 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

1 个答案:

答案 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