Speicherzuweisung “Fehler: kann Vektor der Größe 75.1 Mb nicht zuordnen”

Im Zuge der Vektorisierung einiger Simulationscodes bin ich auf ein Speicherproblem gestoßen. Ich benutze 32 Bit R Version 2.15.0 (über RStudio Version 0.96.122) unter Windows XP. Meine Maschine hat 3,46 GB RAM.

> sessionInfo() R version 2.15.0 (2012-03-30) Platform: i386-pc-mingw32/i386 (32-bit) locale: [1] LC_COLLATE=English_United Kingdom.1252 LC_CTYPE=English_United Kingdom.1252 [3] LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C [5] LC_TIME=English_United Kingdom.1252 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] Matrix_1.0-6 lattice_0.20-6 MASS_7.3-18 loaded via a namespace (and not attached): [1] grid_2.15.0 tools_2.15.0 

Hier ist ein minimales Beispiel für das Problem:

 > memory.limit(3000) [1] 3000 > rm(list = ls()) > gc() used (Mb) gc trigger (Mb) max used (Mb) Ncells 1069761 28.6 1710298 45.7 1710298 45.7 Vcells 901466 6.9 21692001 165.5 173386187 1322.9 > N  library(MASS) > sims  sims <- mvrnorm(n = N + 1, mu = rep(0, 11), Sigma = diag(nrow = 11)) Error: cannot allocate vector of size 75.1 Mb 

(In meiner Anwendung ist die Kovarianzmatrix Sigma nicht diagonal, aber ich bekomme den gleichen Fehler.)

Ich habe den Nachmittag damit verbracht, über Speicherzuteilungsprobleme in R zu lesen (einschließlich hier , hier und hier ). Aus dem, was ich gelesen habe, habe ich den Eindruck, dass es nicht um den verfügbaren Arbeitsspeicher an sich geht, sondern um den verfügbaren kontinuierlichen Adressraum. Trotzdem scheint mir 75.1Mb ziemlich klein zu sein.

Ich würde Ihre Gedanken oder Vorschläge sehr schätzen.

Solutions Collecting From Web of "Speicherzuweisung “Fehler: kann Vektor der Größe 75.1 Mb nicht zuordnen”"

R ist an den Punkt gelangt, an dem das OS ihm keinen weiteren 75.1Mb großen Teil des RAM zuweisen kann. Das ist die Größe des Speicherblocks, der für die nächste Unteroperation erforderlich ist. Es ist keine Aussage über die Menge an zusammenhängendem RAM, die benötigt wird, um den gesamten process abzuschließen. Zu diesem Zeitpunkt ist Ihr gesamter verfügbarer Arbeitsspeicher erschöpft, aber Sie benötigen mehr Arbeitsspeicher, um fortzufahren, und das Betriebssystem kann nicht mehr RAM für R verfügbar machen.

Mögliche Lösungen hierfür sind vielfältig. Der offensichtlichste ist, eine 64-Bit-Maschine mit mehr RAM zu bekommen. Ich vergesse die Details, aber IIRC auf 32-Bit-Windows, jeder einzelne process kann nur eine begrenzte Menge an RAM (2 GB?) Verwenden und unabhängig von Windows wird ein Stück Speicher für sich behalten, so dass der verfügbare Arbeitsspeicher für R wird etwas weniger als die 3.4Gb, die Sie haben. Unter 64-Bit-Windows wird R in der Lage sein, mehr RAM zu verwenden, und die maximale RAM-Kapazität, die Sie installieren / installieren können, wird erhöht.

Wenn das nicht möglich ist, dann überlegen Sie sich einen alternativen Ansatz; vielleicht machen Ihre Simulationen in Chargen mit der n pro Charge viel kleiner als N Auf diese Weise können Sie eine viel kleinere Anzahl von Simulationen zeichnen, tun, was Sie wollen, Ergebnisse sammeln und diesen process wiederholen, bis Sie genügend Simulationen durchgeführt haben. Du zeigst nicht, was N ist, aber ich vermute, dass es groß ist, also probiere kleiner N mehrmals, um dir N zu geben.

Ich hatte die gleiche Warnung mit dem Raster-Paket.

 > my_mask[my_mask[] != 1] < - NA Error: cannot allocate vector of size 5.4 Gb 

Die Lösung ist wirklich einfach und besteht darin, die Speicherkapazität von R zu erhöhen, hier die Codezeile:

 ##To know the current storage capacity > memory.limit() [1] 8103 ## To increase the storage capacity > memory.limit(size=56000) [1] 56000 ## I did this to increase my storage capacity to 7GB 

Hoffentlich wird dies Ihnen helfen, das Problem zu lösen Prost

gc() kann helfen

Das Speichern von Daten als .RData, das Schließen, das erneute Öffnen von R und das Laden des RData kann helfen.

Siehe meine Antwort hier: https://stackoverflow.com/a/24754706/190791 für weitere Details

stoppt R, egal welchen N-Wert Sie verwenden? versuchen Sie, kleine Werte zu verwenden, und sehen Sie, ob es die mvrnorm-function ist, die das Problem darstellt, oder Sie können sie einfach auf Teilmengen loopen. Fügen Sie die gc() function in die Schleife ein, um einige Arbeitsspeicher kontinuierlich gc()