2012-09-25 49 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