Ich habe Probleme beim Versuch, große Objekte in R zu verwenden. Zum Beispiel:
> memory.limit(4000)
> a = matrix(NA, 1500000, 60)
> a = matrix(NA, 2500000, 60)
> a = matrix(NA, 3500000, 60)
Error: cannot allocate vector of size 801.1 Mb
> a = matrix(NA, 2500000, 60)
Error: cannot allocate vector of size 572.2 Mb # Can't go smaller anymore
> rm(list=ls(all=TRUE))
> a = matrix(NA, 3500000, 60) # Now it works
> b = matrix(NA, 3500000, 60)
Error: cannot allocate vector of size 801.1 Mb # But that is all there is room for
Ich verstehe, dass dies mit der Schwierigkeit zusammenhängt, zusammenhängende Speicherblöcke (von hier ) zu erhalten:
Fehlermeldungen, die beginnen, können keinen Größenvektor zuweisen, was darauf hinweist, dass der Speicher nicht abgerufen werden kann, entweder weil die Größe die Adressraumgrenze für einen Prozess überschritten hat oder wahrscheinlicher, weil das System den Speicher nicht bereitstellen konnte. Beachten Sie, dass bei einem 32-Bit-Build möglicherweise genügend freier Speicher verfügbar ist, jedoch nicht genügend zusammenhängender Adressraumblock, um ihn zuzuordnen.
Wie kann ich das umgehen? Meine Hauptschwierigkeit besteht darin, dass ich zu einem bestimmten Punkt in meinem Skript komme und R einem Objekt keine 200-300 MB zuweisen kann ... Ich kann den Block nicht wirklich vorab zuweisen, da ich den Speicher für andere Verarbeitungen benötige. Dies geschieht auch dann, wenn ich nicht benötigte Objekte sorgfältig entferne.
BEARBEITEN: Ja, Entschuldigung: Windows XP SP3, 4 GB RAM, R 2.12.0:
> sessionInfo()
R version 2.12.0 (2010-10-15)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_Caribbean.1252 LC_CTYPE=English_Caribbean.1252
[3] LC_MONETARY=English_Caribbean.1252 LC_NUMERIC=C
[5] LC_TIME=English_Caribbean.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
Calloc
undFree
speichern, aber ich vermute, das ist nicht das, was Benjamin tut.Antworten:
Überlegen Sie, ob Sie all diese Daten wirklich explizit benötigen oder ob die Matrix dünn sein kann? In R gibt es eine gute Unterstützung
Matrix
für spärliche Matrizen (siehe Paket für z. B.).Halten Sie alle anderen Prozesse und Objekte in R auf ein Minimum, wenn Sie Objekte dieser Größe erstellen müssen. Verwenden Sie
gc()
diese Option , um jetzt nicht verwendeten Speicher zu löschen oder besser nur das benötigte Objekt in einer Sitzung zu erstellen .Wenn dies nicht helfen kann, besorgen Sie sich einen 64-Bit-Computer mit so viel RAM, wie Sie sich leisten können, und installieren Sie 64-Bit R.
Wenn Sie dies nicht tun können, gibt es viele Onlinedienste für Remote-Computing.
Wenn Sie dies nicht tun können, helfen Ihnen die Speicherzuordnungstools wie package
ff
(oderbigmemory
wie Sascha erwähnt) beim Erstellen einer neuen Lösung. Nach meiner begrenzten Erfahrungff
ist das Paket fortgeschrittener, aber Sie sollten dasHigh Performance Computing
Thema in CRAN-Aufgabenansichten lesen .quelle
Für Windows-Benutzer hat mir Folgendes sehr geholfen, einige Speicherbeschränkungen zu verstehen:
gc()
Sie, um die Speicherbereinigung durchzuführen => es funktioniert, ich kann sehen, dass die Speichernutzung auf 2 GB gesunken istZusätzliche Ratschläge, die auf meinem Computer funktionieren:
quelle
gc()
ist nur eine Illusion. Das Überprüfen des Task-Managers ist nur eine sehr einfache Windows-Operation. Der einzige Rat, dem ich zustimmen kann, ist das Speichern im .RData-Formatgc()
das nicht funktioniert. Ich meine nur, dass R es automatisch macht, so dass Sie es nicht manuell machen müssen. Siehe hiergc()
Funktioniert . Sie brauchen es einfach nicht zu benutzen, weil R es intern machtHier ist eine Präsentation zu diesem Thema, die Sie vielleicht interessant finden:
http://www.bytemining.com/2010/08/taking-r-to-the-limit-part-ii-large-datasets-in-r/
Ich habe die besprochenen Dinge nicht selbst ausprobiert, aber das
bigmemory
Paket scheint sehr nützlich zu seinquelle
Der einfachste Weg, diese Einschränkung zu umgehen, besteht darin, auf 64-Bit R umzuschalten.
quelle
Error: cannot allocate vector of size ... Gb
stattdessen (aber ja, ich habe viele Daten).Ich bin auf ein ähnliches Problem gestoßen und habe 2 Flash-Laufwerke als 'ReadyBoost' verwendet. Die beiden Laufwerke haben zusätzlich 8 GB Arbeitsspeicher (für den Cache) bereitgestellt, das Problem gelöst und die Geschwindigkeit des gesamten Systems erhöht. Um Readyboost zu verwenden, klicken Sie mit der rechten Maustaste auf das Laufwerk, gehen Sie zu den Eigenschaften und wählen Sie "ReadyBoost" und das Optionsfeld "Dieses Gerät verwenden". Klicken Sie zum Konfigurieren auf "Anwenden" oder "OK".
quelle
Ich folgte der Hilfeseite von memor.limit und stellte fest, dass R auf meinem Computer standardmäßig bis zu ~ 1,5 GB RAM verwenden kann und dass der Benutzer dieses Limit erhöhen kann. Verwenden Sie den folgenden Code:
hat mir geholfen, mein Problem zu lösen.
quelle
Wenn Sie Ihr Skript unter Linux ausführen, können Sie diesen Befehl verwenden:
und der Server weist Ihnen den angeforderten Speicher zu (gemäß den Serverlimits, aber bei gutem Server können Riesendateien verwendet werden).
quelle
server_name
? Ichcannot allocate vector size...
stoße darauf, wenn ich versuche, eine riesige Document-Term-Matrix auf einem AMI zu erstellen, und ich kann nicht herausfinden, warum es nicht genug Speicher hat oder wie viel mehr ich mieten muss. Danke dir!Die oben erwähnte Save / Load-Methode funktioniert bei mir. Ich bin nicht sicher, wie / ob
gc()
der Speicher defragmentiert wird, aber dies scheint zu funktionieren.quelle