2012-09-25 3 views
8

Ich habe kürzlich die Wunder der Pakete bigmemory, ff und filehash entdeckt, um sehr große Matrizen zu behandeln.Interaktiv arbeiten mit Listenobjekten, die massiven Speicher aufnehmen

Wie kann ich mit sehr großen (300MB ++) Listen umgehen? In meiner Arbeit arbeite ich jeden Tag mit diesen Listen. Ich kann überall Pflaster-Lösung mit save() & load() Hacks tun, aber ich würde eine bigmemory ähnliche Lösung bevorzugen. Etwas wie ein bigmemorybigmatrix wäre ideal, wo ich mit ihm grundsätzlich identisch zu einem matrix arbeite, außer es nimmt etwas wie 660 Bytes in meinem RAM auf.


Diese Listen sind meist >1000 Länge Listen lm() Objekte (oder ähnliche Regressions Objekte). Zum Beispiel

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

In meinem Projekt werde ich A,B,C,D,E,F Typ-Listen (und sogar mehr als das), die ich habe mit interaktiv zu arbeiten.

Wenn das gigantische Matrizen waren, gibt es eine Tonne Unterstützung. Ich habe mich gefragt, ob es ähnliche Unterstützung in irgendeinem Paket für große list Objekte gab.

+0

Fragen Sie nach Vorschlägen, welches Paket zu verwenden ist? – GSee

+2

Appears ist zu vage, um "Best Practices" zu unterstützen. Es wäre notwendig, die Art dieser "Listen" zu beschreiben. Vielleicht eine der Datenbankschnittstellen. Codierungsberatung erfordert eine bessere Aufgabenbeschreibung. –

+1

Schauen Sie sich das Paket [SOAR] (http://cran.r-project.org/web/packages/SOAR/index.html) vielleicht an? – mnel

Antwort

2

Mit dem Paket können Sie Listen auf der Festplatte speichern und darauf zugreifen. Dies sollte funktionieren (wenn auch ziemlich langsam auf meinem Rechner ...):

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

Listenelemente zugegriffen werden kann, die [ Funktion. Sehen Sie hier für weitere Details: http://cran.r-project.org/web/packages/filehash/vignettes/filehash.pdf