我有以下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()来增加内存大小,但它仍然无法正常工作。有人可以帮助我。
答案 0 :(得分:6)
我不认为这应该是一个答案,但我似乎无法评论你的问题(我的代表太低了吗?):
我确定您已经检查了内存管理的所有明显问题:
通过玩这些数字,您是否能够确定不再能够分配内存的限制?每次开始/杀死其他进程(即使用不同的内存量)时,它是每次都一样吗?
编辑:见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中的内存管理:
我不想光顾你的数据样本而光顾你,但这种方法对某些(并非所有)问题都很有用。
希望有所帮助!
edit:一个非常有用的函数来查找R中对象的内存大小: Tricks to manage the available memory in an R session。
答案 2 :(得分:0)
您正在使用可能包含大量其他程序和进程的设备中执行此操作。关闭所有程序和R.重新启动计算机并仅运行R,然后再次运行代码。没有抱怨,它可能会成功。