2012-09-25 18 views
8

Recientemente he descubierto las maravillas de los paquetes bigmemory, ff y filehash para manejar matrices muy grandes.Interactivamente trabajo con objetos de lista que ocupan memoria masiva

¿Cómo puedo manejar listas muy grandes (300MB ++)? En mi trabajo, trabajo con estas listas todo el día todos los días. Puedo hacer una solución de tirita con save() & load() pirateo en todas partes, pero preferiría una solución tipo bigmemory. Sería ideal algo como bigmemorybigmatrix, donde trabajo básicamente de forma idéntica a matrix, excepto que ocupa algo así como 660 bytes en mi memoria RAM.


Estas listas son en su mayoría >1000 listas de longitud de lm() objetos (u objetos de regresión similares). Por ejemplo,

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)) 

En mi proyecto tendrá A,B,C,D,E,F de tipo listas (y aún más que esto) que tengo que trabajar con interactiva.

Si se tratara de matrices gigantescas, hay una tonelada de apoyo. Me preguntaba si había algún soporte similar en cualquier paquete para objetos grandes list.

+0

¿Está solicitando sugerencias sobre qué paquete usar? – GSee

+2

Parece demasiado vago para admitir el asesoramiento de "mejores prácticas". Describir la naturaleza de estas "listas" sería necesario. Quizás una de las interfaces de base de datos. El consejo de codificación requiere una mejor descripción de la tarea. –

+1

Mire el paquete [SOAR] (http://cran.r-project.org/web/packages/SOAR/index.html) tal vez? – mnel

Respuesta

2

Puede almacenar y acceder a listas en disco usando el paquete . Esto debería funcionar (si bien lentamente en mi máquina ...):

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)) 

elementos de la lista se puede acceder mediante la función [. Consulte aquí para obtener más detalles: http://cran.r-project.org/web/packages/filehash/vignettes/filehash.pdf

Cuestiones relacionadas