0

我有以下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 的暗淡为 10000 100,Matrix1 的暗淡也为 10000 100。

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

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

4

3 回答 3

6

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

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

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

通过玩数字,您是否能够确定您不再能够分配内存的限制?每次都一样还是随着您启动/终止其他进程(即使用不同数量的内存)而改变?

编辑:请参阅R 内存管理/无法分配大小为 n Mb 的向量

于 2012-08-31T16:06:40.720 回答
2

不幸的是,32 位操作系统对其使用的 RAM 数量有一个固有的限制,并且 R 不会使用将对象放到您的硬盘驱动器上并从那里工作。如果你填满了 RAM(通常当函数 'memory.size()' 返回 1.8Gb 时),R 会返回一条消息,说明它不能再分配更多的内存。

bigmemory 包是您最好的选择。这个包允许您在 R 中使用非常大的对象(具有速度冲击)。bigmemory 手册中有大量与您相关的示例 。

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

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

我不会说只对您的数据进行抽样,但这种方法对某些(不是全部)问题很有用。

希望有帮助!

编辑:在 R 中查找对象的内存大小的一个非常有用的功能: 在 R 会话中管理可用内存的技巧

于 2012-08-31T18:09:38.307 回答
0

您正在一个可能有许多其他程序和进程正在运行的设备中执行此操作。关闭所有程序和 R。重新启动计算机并仅运行 R,然后再次运行代码。它可能会毫无怨言地成功。

于 2012-08-31T20:34:40.530 回答