Интерактивная работа со списком объектов, которые занимают огромную память

Я недавно обнаружил чудеса пакетов bigmemory, ff а также filehash обрабатывать очень большие матрицы.

Как я могу обрабатывать очень большие (300 МБ ++) списки? В своей работе я работаю с этими списками каждый день каждый день. Я могу сделать пластырь с save() & load() хаки везде, но я бы предпочел bigmemoryрешение Что-то вроде bigmemorybigmatrix было бы идеально, где я работаю с ним в основном идентично matrix за исключением того, что занимает 660 байтов в моей оперативной памяти.


Эти списки в основном >1000 длина списков lm() объекты (или подобные объекты регрессии). Например,

Y <- rnorm(1000) ; X <- rnorm(1000)
A <- lapply(1:6000, function(i) lm(Y~X))
B <- lapply(1:6000, function(i) lm(Y~X))
C <- lapply(1:6000, function(i) lm(Y~X))
D <- lapply(1:6000, function(i) lm(Y~X))
E <- lapply(1:6000, function(i) lm(Y~X))
F <- lapply(1:6000, function(i) lm(Y~X))

В моем проекте я буду иметь A,B,C,D,E,Fсписки (и даже более того), с которыми мне приходится работать в интерактивном режиме.

Если бы это были гигантские матрицы, есть тонна поддержки. Мне было интересно, была ли подобная поддержка в каком-либо пакете для больших list объекты.

1 ответ

Вы можете хранить и получать доступ к спискам на диске, используя пакет filehash. Это должно работать (если довольно медленно на моей машине...):

Y <- rnorm(1000) ; X <- rnorm(1000)

# set up disk object
library(filehash)
dbCreate("myTestDB")
db <- dbInit("myTestDB")

db$A <- lapply(1:6000, function(i) lm(Y~X))
db$B <- lapply(1:6000, function(i) lm(Y~X))
db$C <- lapply(1:6000, function(i) lm(Y~X))
db$D <- lapply(1:6000, function(i) lm(Y~X))
db$E <- lapply(1:6000, function(i) lm(Y~X))
db$F <- lapply(1:6000, function(i) lm(Y~X))

Доступ к элементам списка можно получить с помощью [ функция. Смотрите здесь для получения более подробной информации: http://cran.r-project.org/web/packages/filehash/vignettes/filehash.pdf

Другие вопросы по тегам