Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R错误:无法分配大小为366.6 MB的向量_R_Optimization - Fatal编程技术网

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

R错误:无法分配大小为366.6 MB的向量,r,optimization,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 ) } } for(1中的i:无模拟){ Vec=行和(扫描(矩阵1,边距=2,矩阵2[i,],`*`)) 如果(i==

我有下面的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 )  } }
for(1中的i:无模拟){
Vec=行和(扫描(矩阵1,边距=2,矩阵2[i,],`*`))

如果(i==1){Result我认为这不应该是一个答案,但我似乎无法对你的问题发表评论(我的代表太低了吗?)

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

  • 确保物理上有足够的内存分配
  • 确保您的进程总数低于进程可寻址限制(现在只有32位的问题)
  • 确保有足够的内存可供分配所请求大小的连续块。内存碎片
通过数字游戏,您是否能够确定不再能够分配内存的限制?是每次都是相同的还是在启动/终止其他进程(即使用不同的内存量)时会发生变化


编辑:请参见

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

bigmemory软件包是您的最佳选择。该软件包允许您在R中使用非常大的对象(速度快)。在R中有大量与您相关的示例

除此之外,还有一些vanilla-R功能可以帮助您在R中管理内存:

  • memory.size():返回R中当前(或最大)内存使用量的信息
  • rm():从工作区中删除R对象
  • gc():调用垃圾收集器,重新分配浪费的内存。根据给定的可选参数,该函数还返回有关内存使用情况的有用信息
我不会说只采集数据样本,以此来资助您,但这种方法对于某些(并非所有)问题是有用的

希望有帮助

编辑:一个非常有用的函数,用于在R中查找对象的内存大小:
.

您在一台可能运行着大量其他程序和进程的设备上执行此操作。请关闭所有程序并运行R。重新启动计算机,只运行R,然后再次运行代码。它可能会成功,而不会有任何抱怨。

预先分配您的
结果
矩阵!您要求您的代码永远花费时间,因为它会增长n loop.fwiw中的对象(
cbind
),要分配该大小的向量,您需要连续内存,而不仅仅是总内存。预分配结果矩阵可能会解决此问题…如果不是,请获取更多内存!您需要声明R“锁定”当它无法分配连续内存时,充其量是含糊不清和误导性的,最坏的情况是完全错误的。它通常会给出一条信息性错误消息并返回控制台提示。这不是我所说的“锁定”。