Интерактивная работа со списком объектов, которые занимают огромную память
Я недавно обнаружил чудеса пакетов bigmemory
, ff
а также filehash
обрабатывать очень большие матрицы.
Как я могу обрабатывать очень большие (300 МБ ++) списки? В своей работе я работаю с этими списками каждый день каждый день. Я могу сделать пластырь с save()
& load()
хаки везде, но я бы предпочел bigmemory
решение Что-то вроде bigmemory
bigmatrix
было бы идеально, где я работаю с ним в основном идентично 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