2013-02-26 19 views
10

内存警告是否会影响我的R分析?R内存限制警告vs“无法分配...”

当运行中的R大数据分析脚本,我得到一个警告是这样的:

In '... ' reached total allocation of ___Mb: see help...

但我的脚本仍然没有错误,只是警告。与其他数据集,我得到一个错误这样的:

Error: cannot allocate vector of size ___Mb:

我知道错误打破我的数据分析,但有什么错刚刚起步的警告?我没有注意到我的数据集中缺少任何东西,但它非常大,而且我没有好的办法来检查一切。我在18000Mb分配给内存,不能合理分配更多。

+0

您使用的是什么平台/操作系统?运行'Sys.info()[“machine”]和'.Platform $ OS.type'。在Windows下是32bit R吗? – 2013-02-26 23:08:17

+0

它是64位Windows 7企业版(x86-64,windows)。该机器具有20Gb的内存,但当我分配19000Mb时,我会得到相同的警告。在我的脚本中有一部分内存是一个问题,我使用完整的18000Mb(在Windows任务管理器中显示)。我需要导入并合并许多文本文件,运行一些计算,然后重新排列数据,然后再将其分解为更小的片段。 – GregS 2013-02-26 23:35:47

+2

您可以尝试分配系统中的所有内存。 R无法窃取已被OS使用的内存。我不确定在你的代码的内存密集部分期间是否大量使用'gc()'可能会有所帮助? – 2013-02-26 23:50:20

回答

8

遥想R 2.5.1 news我发现这个参考内存分配警告:

malloc.c has been updated to version 2.8.3. This version has a slightly different allocation strategy, and is likely to work a little better close to address space limits but may give more warnings about reaching the total allocation before successfully allocating.

在此基础上说明,我推测(不含内实施任何先进的知识)将发出警告当内存R中的分配调用(malloc.c)未能尝试分配内存。多次尝试分配内存,可能使用不同的方法,并可能调用垃圾回收器。只有当malloc相当确定分配不能时,它会返回一个错误。

警告不妥协现有的R对象。他们只是告诉用户R接近计算机内存的限制。

(我希望更有知识的用户可以证实这一点...)

+1

确实似乎是R在发出警告时调用垃圾回收器的情况。您可以使用'gcinfo(TRUE)'来启用日志记录并仔细分配内存,以观察成功分配的一些警告和GC消息。 – Jerzy 2016-03-31 13:09:10