R错误:无法分配大小为366.6 MB的向量

时间:2012-08-31 15:58:25

标签: r optimization

我有以下for循环

for( i in 1:No_Simulations) {
      Vec =   rowSums(  sweep(Matrix1,MARGIN=2,Matrix2[i,],`*`)  )
      if( i == 1 ) {  Result <- Vec } else {   Result = cbind(  Result , Vec )  } }

其中No_Simulations = 10000,Matrix2的dim为10000 100,Matrix1的dim也为10000 100。

我无法运行这部分代码,因为R编译器给了我以下错误:“不可能的所有un vecteur de taille 366.6 Mo”

即。无法分配大小为366.6 MB的向量。我也尝试使用memory.limit()来增加内存大小,但它仍然无法正常工作。有人可以帮助我。

3 个答案:

答案 0 :(得分:6)

我不认为这应该是一个答案,但我似乎无法评论你的问题(我的代表太低了吗?):

我确定您已经检查了内存管理的所有明显问题:

  • 确保您有足够的内存来分配
  • 确保您的流程总数低于PROCESS可寻址限制(现在只有32位的问题)
  • 确保有足够的内存可以分配您请求的大小的连续块。记忆碎片。

通过玩这些数字,您是否能够确定不再能够分配内存的限制?每次开始/杀死其他进程(即使用不同的内存量)时,它是每次都一样吗?

编辑:见R memory management / cannot allocate vector of size n Mb

答案 1 :(得分:2)

不幸的是,32位操作系统对它们使用的RAM量有固有的限制,而R不会使用put对象到你的硬盘驱动器上并在那里工作。 如果填充RAM(通常在函数&#39; memory.size()&#39;返回1.8Gb时),R会返回一条消息,指出它不能再分配更多的内存。

bigmemory套餐是你最好的选择。这个包允许你在R中使用非常大的对象(速度命中)。有大量与您相关的示例 the bigmemory manual

最重要的是,有一些vanilla-R函数可以帮助R中的内存管理:

  • memory.size():返回有关R中当前(或最大)内存使用情况的信息
  • rm():从工作区中删除R对象
  • gc():调用垃圾收集器,重新分配浪费的内存。根据给定的可选参数,该函数还返回有关内存使用情况的有用信息。

我不想光顾你的数据样本而光顾你,但这种方法对某些(并非所有)问题都很有用。

希望有所帮助!

edit:一个非常有用的函数来查找R中对象的内存大小: Tricks to manage the available memory in an R session

答案 2 :(得分:0)

您正在使用可能包含大量其他程序和进程的设备中执行此操作。关闭所有程序和R.重新启动计算机并仅运行R,然后再次运行代码。没有抱怨,它可能会成功。