R";错误:无法分配大小为344 kb的向量;
我的R";错误:无法分配大小为344 kb的向量;,r,for-loop,matrix,memory-management,R,For Loop,Matrix,Memory Management,我的memory.limit()是3583,我家里有一台带有8G RAM的64位机器,只要远程访问办公室的计算机,就发现它也是8G RAM。所以 我无法成功运行下面的R代码,我应该重置内存限制吗?但有人认为这是一种危险的方法,有人能告诉我如何解决这个问题吗?提前谢谢 loop<-1000;T<-45 bbb<-list() for(i in 1:loop) { bbb[[i]]<-list() bbb[[i]][[1]]<-matrix(rep(1,loop
memory.limit()
是3583,我家里有一台带有8G RAM的64位机器,只要远程访问办公室的计算机,就发现它也是8G RAM。所以
我无法成功运行下面的R代码,我应该重置内存限制吗?但有人认为这是一种危险的方法,有人能告诉我如何解决这个问题吗?提前谢谢
loop<-1000;T<-45
bbb<-list()
for(i in 1:loop)
{
bbb[[i]]<-list()
bbb[[i]][[1]]<-matrix(rep(1,loop*(T-1)),loop,T-1)
bbb[[i]][[2]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[3]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[4]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[5]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[6]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[7]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[8]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[9]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[10]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[11]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[12]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[13]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[14]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[15]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[16]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[17]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[18]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[19]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[20]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[21]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[22]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[23]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[24]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[25]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[26]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[27]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[28]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[29]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[30]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[31]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[32]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
bbb[[i]][[33]]<-matrix(rep(0,loop*(T-1)),loop,T-1)
}
loop我想这取决于你对矩阵列表做了什么,但也许你可以把你的任务分成更小的部分?或者您可以尝试使用lappy
,它在我的机器上运行得更快,但最终创建的对象大小完全相同。我认为在重复数据时,lappy
有一些节省内存的优点
如果这不起作用,请尝试查看矩阵
包和稀疏矩阵
create_bbb <- function(loop = 1000, T = 45){
inner.list <- lapply(1:33, FUN = function(x){
if(x == 1) fill <- 1
else fill <- 0
return(matrix(rep(fill, loop * (T-1)), loop, T-1))
})
bbb <- lapply(1:loop, function(.) inner.list)
return(bbb)
}
bbb_test <- create_bbb()
# Check
all.equal(bbb, bbb_test)
# TRUE
create_bbb那它在你的机器上工作了吗?我认为这是我发现的关于内存使用情况的最好的回顾。它指出“一个对象大小的一个微妙之处是组件可以在多个对象之间共享”,这是我对为什么lapply
会有帮助的最佳猜测是的,它确实有效!Lapply比for loops好。再次感谢!