Проблема с памятью в R "Ошибка: невозможно выделить вектор размером 344 КБ" - PullRequest
0 голосов
/ 15 апреля 2020

Мой memory.limit() - 3583, у меня дома 64-битный компьютер с 8G RAM, и просто удаленный доступ к моему компьютеру в офисе, а затем обнаружил, что это также 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)
}

1 Ответ

1 голос
/ 15 апреля 2020

Полагаю, это зависит от того, что вы делаете со списком матриц, но, возможно, вы могли бы разбить свою задачу на более мелкие куски? Или вы можете попробовать использовать 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
...