gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:00:55 25 4
gpt4 key购买 nike

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

  • 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 调用的输出 - 类 rjags 的对象):
    > str(out)
    List of 6
    $ model :List of 8
    ..$ ptr :function ()
    ..$ data :function ()
    ..$ model :function ()
    ..$ state :function (internal = FALSE)
    ..$ nchain :function ()
    ..$ iter :function ()
    ..$ sync :function ()
    ..$ recompile:function ()
    ..- attr(*, "class")= chr "jags"
    $ BUGSoutput :List of 24
    ..$ n.chains : int 2
    ..$ n.iter : num 1000
    ..$ n.burnin : num 500
    ..$ n.thin : num 1
    ..$ n.keep : int 500
    ..$ n.sims : int 1000
    ..$ sims.array : num [1:500, 1:2, 1:5] -5.86e-06 -3.78e-02 6.92e-02 4.33e-02 4.34e-02 ...
    .. ..- attr(*, "dimnames")=List of 3
    .. .. ..$ : NULL
    .. .. ..$ : NULL
    .. .. ..$ : chr [1:5] "alpha" "beta" "deviance" "overdisp_sigma" ...
    ..$ sims.list :List of 5
    .. ..$ alpha : num [1:1000, 1] 0.04702 -0.00818 0.03757 0.00799 0.00369 ...
    .. ..$ beta : num [1:1000, 1] -0.135 -0.2082 -0.0112 -0.129 -0.1613 ...
    .. ..$ deviance : num [1:1000, 1] 16028 22052 16127 16057 16141 ...
    .. ..$ overdisp_sigma: num [1:1000, 1] 0.26506 0.00821 0.24998 0.25793 0.26013 ...
    .. ..$ yr_reff_sigma : num [1:1000, 1] 0.1581 0.176 0.0695 0.1052 0.1043 ...
    ..$ sims.matrix : num [1:1000, 1:5] 0.04702 -0.00818 0.03757 0.00799 0.00369 ...
    .. ..- attr(*, "dimnames")=List of 2
    .. .. ..$ : NULL
    .. .. ..$ : chr [1:5] "alpha" "beta" "deviance" "overdisp_sigma" ...
    ..$ summary : num [1:5, 1:9] 3.16e-03 -1.20e-01 1.68e+04 2.29e-01 1.19e-01 ...
    .. ..- attr(*, "dimnames")=List of 2
    .. .. ..$ : chr [1:5] "alpha" "beta" "deviance" "overdisp_sigma" ...
    .. .. ..$ : chr [1:9] "mean" "sd" "2.5%" "25%" ...
    ..$ mean :List of 5
    .. ..$ alpha : num [1(1d)] 0.00316
    .. ..$ beta : num [1(1d)] -0.12
    .. ..$ deviance : num [1(1d)] 16835
    .. ..$ overdisp_sigma: num [1(1d)] 0.229
    .. ..$ yr_reff_sigma : num [1(1d)] 0.119
    ..$ sd :List of 5
    .. ..$ alpha : num [1(1d)] 0.0403
    .. ..$ beta : num [1(1d)] 0.0799
    .. ..$ deviance : num [1(1d)] 2378
    .. ..$ overdisp_sigma: num [1(1d)] 0.0702
    .. ..$ yr_reff_sigma : num [1(1d)] 0.036
    ..$ median :List of 5
    .. ..$ alpha : num [1(1d)] 0.00399
    .. ..$ beta : num [1(1d)] -0.123
    .. ..$ deviance : num [1(1d)] 16209
    .. ..$ overdisp_sigma: num [1(1d)] 0.252
    .. ..$ yr_reff_sigma : num [1(1d)] 0.111
    ..$ root.short : chr [1:5] "alpha" "beta" "deviance" "overdisp_sigma" ...
    ..$ long.short :List of 5
    .. ..$ : int 1
    .. ..$ : int 2
    .. ..$ : int 3
    .. ..$ : int 4
    .. ..$ : int 5
    ..$ dimension.short: num [1:5] 0 0 0 0 0
    ..$ indexes.short :List of 5
    .. ..$ : NULL
    .. ..$ : NULL
    .. ..$ : NULL
    .. ..$ : NULL
    .. ..$ : NULL
    ..$ last.values :List of 2
    .. ..$ :List of 4
    .. .. ..$ alpha : num [1(1d)] 0.0296
    .. .. ..$ beta : num [1(1d)] -0.0964
    .. .. ..$ deviance : num [1(1d)] 16113
    .. .. ..$ overdisp_sigma: num [1(1d)] 0.265
    .. ..$ :List of 4
    .. .. ..$ alpha : num [1(1d)] 0.0334
    .. .. ..$ beta : num [1(1d)] -0.228
    .. .. ..$ deviance : num [1(1d)] 16139
    .. .. ..$ overdisp_sigma: num [1(1d)] 0.257
    ..$ program : chr "jags"
    ..$ model.file : chr "model.txt"
    ..$ isDIC : logi TRUE
    ..$ DICbyR : logi TRUE
    ..$ pD : num 2830902
    ..$ DIC : num 2847738
    ..- attr(*, "class")= chr "bugs"
    $ parameters.to.save: chr [1:5] "alpha" "beta" "overdisp_sigma" "yr_reff_sigma" ...
    $ model.file : chr "model.txt"
    $ n.iter : num 1000
    $ DIC : logi TRUE
    - attr(*, "class")= chr "rjags"

    最佳答案

    发生这种情况的一种方式是,如果对象具有需要保存的关联环境,则它是有意义的。这在“闭包”的上下文中最常见 (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

    关于r - object.size() 报告小于 .Rdata 文件的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21836747/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com