2012-09-25 57 views
8

我最近发现了处理非常大的矩阵的包bigmemoryfffilehash的奇观。交互式处理占用大量内存的列表对象

我该如何处理非常大的(300MB ++)列表?在我的工作中,我每天都在使用这些列表。我可以在任何地方使用save() & load()黑客进行创可贴解决方案,但我更喜欢类似bigmemory的解决方案。类似于bigmemorybigmatrix将是理想的,在那里我使用它基本上与matrix相同,除了它在我的RAM中占用660字节之类的字符。


这些列表大多是lm()对象(或类似的回归对象)的>1000长度列表。例如,

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对象的包中有类似的支持。

+0

您是否在寻求有关使用哪个软件包的建议? – GSee

+2

显得过于模糊,无法支持“最佳实践”建议。描述这些“列表”的性质将是必要的。也许是数据库接口之一。编码建议需要更好的任务描述。 –

+1

看看[SOAR](http://cran.r-project.org/web/packages/SOAR/index.html)包吧? – mnel

回答

2

您可以使用软件包存储和访问磁盘上的列表。这应该工作(如果相当慢我的机器上...):

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