Ich habe 4 GB RAM und habe Probleme beim Ziehen von 147.6MB in R in Linux, entsprechend der Fehlermeldung, die ich bekomme: Error: cannot allocate vector of size 147.6 Mb
.Das Zusammenführen von data.frames führt zu einem nicht ausreichenden Speicherfehler
Wie kann ich dies diagnostizieren?
Hier ist mein Code:
IDs <- read.csv('Set1.csv') # 2 MB
Set2 <- read.csv('Set2.csv') # 240 MB
data <- merge(IDs, Set2, by='MemberID')
rm(IDs) # Remove junk!
rm(Set2) # Remove junk!
gc()
print('First merge complete')
Set3 <- read.csv('Set3.csv') # 25 MB
data <- merge(data, Set3, by='MemberID')
rm(Set3) # Remove junk!
gc()
print('Second merge complete')
Die Ausführung stoppt nach der ersten print-Anweisung. Ich kann nicht verstehen, woher die zusätzliche Speicherbelegung kommt. Wenn man sich die Dokumentation zu memory() in R ansieht, scheint es sich um ein zusammenhängendes Speicherproblem zu handeln. Gibt es eine Möglichkeit, dies in R auf Ubuntu zu behandeln?
Auch andere Leute, die ähnliche Fragen stellten, wurden hier angeschaut, aber die vorgeschlagenen Lösungen waren Windows-spezifisch.
EDIT 1
Einige Kommentare die Kommentare unten Adresse:
> print(object.size(IDs), units="Mb")
1.3 Mb
> print(object.size(Set2), units="Mb")
142.6 Mb
> print(object.size(Set3), units="Mb")
12.5 Mb
Also, es sieht nicht aus wie die Objekte zu viel Größe ändern sich von in von CSV gelesen werden. Ich werde auf data.table prüfen() und der Rest ...
EDIT 2
ich meinen Code aktualisiert haben data.table() zu verwenden und den gleichen Fehler haben. Das macht mich besorgt, dass es vielleicht irgendwie speziell für meine Maschine ist? Dies erscheint nur sehr seltsam für die Größe der beteiligten Dateien. Error: cannot allocate vector of size 147.6 Mb
IDs <- as.data.table(read.csv('Set1.csv')) # 2 MB
Set2 <- as.data.table(read.csv('Set2.csv')) # 240 MB
data <- merge(IDs, Set2, by='MemberID')
rm(IDs) # Remove junk!
rm(Set2) # Remove junk!
gc()
print('First merge complete')
Set3 <- as.data.table(read.csv('Set3.csv')) # 25 MB
data <- merge(data, Set3, by='MemberID')
rm(Set3) # Remove junk!
gc()
print('Second merge complete')
EDIT 3
meine Daten durchgecheckt, ich vermute, dass das Problem hier sein kann. Es gab einige allgemeine Feldnamen in Set3.csv, also glaube ich, dass es böse n x n Joins oder so gemacht hat.
Du bist irgendwo in dem, was ich denke, der zweite Kreis von [The R Inferno] (https://www.google.com/url?q=http://www.burns-stat.com/pages/ Tutor/R_inferno.pdf & sa = U & ei = gr-ET_f2Ms_TiAKs-fH1BA & ved = 0CBAQFjAA & usg = AFQjCNFYCWUrzMj_7SOwr-EJ9Gu34VOl_w).Merge ist sehr speicherintensiv, ich nehme an, dass, wenn man sich 'object.size' anschaut, die csv-Dateien wesentlich größer sind, als wenn man das in R gelesen hat. – Justin
Ich hatte glücklicherweise' data.table() ' zum Zusammenführen großer Datenobjekte, sowohl hinsichtlich der Speicherverwaltung als auch der Betriebsleistung. – Chase
Nur eine kurze Überprüfung, Sie sind in einer frischen R Sitzung richtig? – jimmyb