【问题标题】:Memory problem in R "Error:cannot allocate vector of size 344 kb"R中的内存问题“错误:无法分配大小为344 kb的向量”
【发布时间】:2020-07-27 19:38:17
【问题描述】:

我的memory.limit() 是 3583,我家里有一台 8G 内存的 64 位机器,只是在办公室远程访问我的电脑然后发现它也是 8G 内存。所以 我无法成功运行下面的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】:

    我想这取决于你对矩阵列表做了什么,但也许你可以把你的任务分成更小的块?或者您可以尝试使用lapply,它在我的机器上运行得更快,但最终会创建一个大小完全相同的对象。我认为 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
    

    【讨论】:

    • 那它在你的机器上工作了吗?我认为这是我发现here 对内存使用情况的最佳评论。它指出“对象大小的一个微妙之处在于组件可以在多个对象之间共享”,这是我对为什么 lapply 会在这里有所帮助的最佳猜测
    • 是的,它确实有效! Lapply 比 for 循环更好。再次感谢!
    猜你喜欢
    • 2018-03-31
    • 1970-01-01
    • 2012-06-10
    • 2015-10-25
    • 2021-08-31
    相关资源
    最近更新 更多