尽管使用64位版本,但在R中无法分配向量

3
我正在尝试在R中执行dcast,生成一个矩阵,如我之前提出的另一个问题所示。然而,我遇到了这个错误:

“Error:无法分配大小为2.8GB的向量。”

我的台式电脑有8GB的RAM,我正在运行ubuntu 11.10 64位版本。我是否使用了错误版本的R?如何确定,在运行R时有确定的方法吗?我必须有足够的空间来分配这个向量。

sessionInfo()会告诉你,你正在使用32位还是64位的R版本。 - Vincent Zoonekynd
好的,谢谢。确实我正在运行64位版本,所以现在我想知道为什么我可能无法分配向量。 - Dan Q
我的理解是,系统有多少RAM并不重要。如果您没有2.8GB的连续地址空间,您将会看到这个错误。 - joran
这是否意味着我无法缓解这个问题?有趣的是,我尝试在我的 MacBook Air 上用 4GB 的 RAM 在 R 中完成这个任务,它没有报错,但是却挂起了,可能最终会返回并抱怨缺乏内存。 - Dan Q
不,几乎总能找到答案。关于R的内存问题已经有了很多讨论。首先,在Stack Overflow上搜索"[r] cannot allocate"并进行一些阅读。 - joran
我在您之前的问题中发布了一种替代(更节省内存?)的答案,但不知道您是否使用较小的数据集来完成整个分析? - Martin Morgan
1个回答

9
该错误信息意味着R需要分配另外2.8Gb的内存以完成您尝试执行的操作。它并不意味着需要分配最大2.8Gb的内存。在运行该R代码时,在shell中运行top,观察R使用内存的方式,直到它达到额外2.8Gb地址空间不可用的点。
您的计算机上是否有大量交换空间?我可以很容易地看出您正在进行的操作如何使用了所有8Gb的RAM和所有的交换空间,因此没有其他地方供R获取内存空间,因此会出现错误。
也许你可以尝试分块进行dcast,或者尝试使用dcast以外的替代方法。如果需要帮助,请发布另一个问题。

这可能就是问题所在,我意识到我在安装Ubuntu时忘记分配交换分区了。让我尝试做一下,看看是否可以解决这个问题。 - Dan Q
1
@DanQ 嗯,除非你有很多时间可以浪费或者喜欢闲逛,否则这不是一个解决方案——你的磁盘将会在操作系统在硬盘和内存之间来回推送 R 需要的数据时不断地抖动。你应该考虑是否有更加内存高效的方法来完成你想要做的事情。 - Gavin Simpson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接