R错误:无法分配大小为366.6 MB的向量
我有下面的for循环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( 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“锁定”当它无法分配连续内存时,充其量是含糊不清和误导性的,最坏的情况是完全错误的。它通常会给出一条信息性错误消息并返回控制台提示。这不是我所说的“锁定”。