R中的高效内存管理

时间:2013-04-05 17:33:07

标签: r memory memory-management

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

> memory.limit()
6141

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

> memory.limit(50000)

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

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:5)

R不管理机器的内存。这是操作系统的责任。 Windows memory.sizememory.limit存在的唯一原因是(来自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中的连续空间,因此只能使用少量大对象来解决内存分配问题。你可能会对你创建的对象的数量/大小更加小心,并避免使用这么多内存。

答案 2 :(得分:4)

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

这是一个例子

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