我的机器中有6 GB的内存(Windows 7 Pro 64位),在R中,我得到了
> memory.limit()
6141
当然,在处理大数据时,会发生内存分配错误。所以为了让R使用虚拟内存,我使用
> memory.limit(50000)
现在,在运行我的脚本时,我不再有内存分配错误,但是R占用了我计算机中的所有内存,因此在脚本完成之前我无法使用该机器。我想知道是否有更好的方法让R管理机器的内存。我认为它可以做的是使用虚拟内存,如果它使用的是物理内存而不是用户指定的内存。有没有这样的选择?
答案 0 :(得分:9)
查看ff和bigmemory包。这使用了解R对象的函数将它们保存在磁盘上,而不是让操作系统(它只知道内存块,而不是它们所代表的内容)。
答案 1 :(得分:5)
R不管理机器的内存。这是操作系统的责任。 Windows memory.size
和memory.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