12

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

> memory.limit()
6141

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

> memory.limit(50000)

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

4

3 回答 3

10

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

于 2013-04-06T01:12:27.133 回答
5

R 不管理机器的内存。那是操作系统的责任。在 Windows 上存在的唯一原因是因为(memory.size来自):memory.limithelp("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 中的连续空间,因此您可能会遇到仅使用几个大对象的内存分配问题。您可能会更加小心您创建的对象的数量/大小,并避免使用太多内存。

于 2013-04-05T17:56:48.130 回答
4

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

这里有一个例子

m = matrix(rnorm(1000), 2, 2)
d = as.data.frame(m)
object.size(m)
232 bytes
object.size(d)
808 bytes
于 2013-04-05T18:07:23.010 回答