【问题标题】:Efficient memory management in RR中的高效内存管理
【发布时间】:2013-03-28 05:27:08
【问题描述】:

我的机器(Windows 7 Pro 64 位)中有 6 GB 内存,而在 R 中,我得到了

> memory.limit()
6141

当然,在处理大数据时,会出现内存分配错误。所以为了让R使用虚拟内存,我使用了

> memory.limit(50000)

现在,在运行我的脚本时,我不再出现内存分配错误,但是 R 占用了我计算机中的所有内存,所以在脚本完成之前我无法使用机器。我想知道是否有更好的方法让 R 管理机器的内存。我认为它可以做的事情是使用虚拟内存,如果它使用的物理内存超过用户指定的。有没有这样的选择?

【问题讨论】:

    标签: r memory memory-management


    【解决方案1】:

    查看 ff 和 bigmemory 包。这使用知道 R 对象的函数将它们保存在磁盘上,而不是让操作系统(它只知道内存块,但不知道它们代表什么)。

    【讨论】:

      【解决方案2】:

      R 不管理机器的内存。那是操作系统的责任。 memory.size 和 memory.limit 在 Windows 上存在的唯一原因是(来自 help("Memory-limits")):

       Under Windows, R imposes limits on the total memory allocation
       available to a single session as the OS provides no way to do so:
       see 'memory.size' and 'memory.limit'.
      

      R 对象还必须占用 RAM 中的连续空间,因此您可能会遇到仅使用几个大对象的内存分配问题。您可能会更加小心所创建对象的数量/大小,并避免使用太多内存。

      【讨论】:

        【解决方案3】:

        这不是一个解决方案,而是一个建议。尽可能使用内存高效的对象:例如,使用矩阵而不是 data.frame。

        这里是一个例子

        m = matrix(rnorm(1000), 2, 2)
        d = as.data.frame(m)
        object.size(m)
        232 bytes
        object.size(d)
        808 bytes
        

        【讨论】:

        • 这个例子似乎只突出了非常小的固定数据分配差异。将矩阵设为m = matrix(rnorm(1000), 20000, 10),对象之间的大小差异可以忽略不计。事实上,我在我的工作区中检查了一些随机的data.frame,matrix 版本大了 2 倍。所以我认为这个建议对手头的问题没有用。
        • 没有。我不同意。矩阵比 data.frame 更有效。这就是为什么在内部,许多 R 函数将强制转换为数据帧中的矩阵数据的原因之一。我清楚地提到,如果您愿意,我的回答只是一个最佳实践的建议。对于您的第二条评论(随机 data.frame 小于矩阵版本),我认为这是错误的。
        • 这是我在工作区中看到的特定data.frame。 object.size(as.data.frame(rec)): 11542192 bytes 和 object.size(as.matrix(rec)): 26516160 bytes.
        • 这是一个可重现的示例:d = data.frame(a = 1:100, b = "b") - 尝试检查各种对象大小。没有办法存储例如数字和字符串在matrix 中以比data.frame 更有效的方式(内存和速度)。您的建议只会为统一类型 data.frame's 节省可忽略不计的内存量(字面意思是大约 600 字节),并且不适用于其他任何东西。
        • @eddi 请尝试阅读this 以了解与data.frame 相比矩阵效率的观点。
        猜你喜欢
        • 1970-01-01
        • 2018-04-20
        • 2015-12-27
        • 1970-01-01
        • 2015-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-04
        相关资源
        最近更新 更多