R中的高效内存管理

问题描述 投票:11回答:3

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

> memory.limit()
6141

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

> memory.limit(50000)

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

r memory memory-management
3个回答
9
投票

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


5
投票

R不管理机器的内存。这是操作系统的责任。 memory.sizememory.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中的连续空间,因此只需几个大对象就可能遇到内存分配问题。你可能会对你创建的对象的数量/大小更加小心,并避免使用这么多内存。


4
投票

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

这是一个例子

m = matrix(rnorm(1000), 2, 2)
d = as.data.frame(m)
object.size(m)
232 bytes
object.size(d)
808 bytes
© www.soinside.com 2019 - 2024. All rights reserved.