R中的内存问题“错误:无法分配大小为344 kb的向量”

问题描述 投票:0回答:1

我的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)
}
r for-loop matrix memory-management
1个回答
0
投票

我想这取决于您对矩阵列表的处理方式,但是也许您可以将任务分解成较小的块?或者,您可以尝试使用lapply,它在我的计算机上运行得更快,但最终会创建一个大小完全相同的对象。 I 思考 lapply在重复数据时具有一些节省内存的优点。

[如果这不起作用,请尝试查看Matrix程序包并稀疏矩阵。

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
© www.soinside.com 2019 - 2024. All rights reserved.