Mit nur 4 GB RAM (unter Windows 10, also ungefähr 2 oder mehr realistisch 1 GB) musste ich bei der Zuweisung sehr vorsichtig sein.
Ich benutze fast ausschließlich data.table.
Mit der Funktion 'fread' können Sie Informationen beim Import nach Feldnamen unterteilen. Importieren Sie zunächst nur die Felder, die tatsächlich benötigt werden. Wenn Sie Base R Read verwenden, setzen Sie die falschen Spalten unmittelbar nach dem Import auf Null.
Wie 42- vorschlägt, werde ich, wo immer möglich, unmittelbar nach dem Importieren der Informationen innerhalb der Spalten eine Teilmenge erstellen.
Ich rm () häufig Objekte aus der Umgebung, sobald sie nicht mehr benötigt werden, z. B. in der nächsten Zeile, nachdem ich sie verwendet habe, um etwas anderes zu unterteilen, und rufe gc () auf.
'fread' und 'fwrite' aus data.table können im Vergleich zu Lese- und Schreibvorgängen der Basis R sehr schnell sein.
Wie kpierce8 vorschlägt, schreibe ich fast immer alles aus der Umgebung heraus und fresse es wieder ein, selbst wenn Tausende / Hunderttausende winziger Dateien durchkommen müssen. Dies hält nicht nur die Umgebung "sauber" und hält die Speicherzuweisung niedrig, sondern R neigt möglicherweise aufgrund des schwerwiegenden Mangels an verfügbarem RAM dazu, häufig auf meinem Computer abzustürzen. sehr häufig. Wenn die Informationen auf dem Laufwerk selbst gesichert werden, während der Code verschiedene Phasen durchläuft, muss ich nicht von vorne beginnen, wenn er abstürzt.
Ab 2017 laufen meiner Meinung nach die schnellsten SSDs über den M2-Port mit einigen GB pro Sekunde. Ich habe eine wirklich einfache 50 GB Kingston V300 (550 MB / s) SSD, die ich als primäre Festplatte verwende (mit Windows und R). Ich behalte alle Masseninformationen auf einem billigen 500-GB-WD-Plattenteller. Ich verschiebe die Datensätze auf die SSD, wenn ich anfange, daran zu arbeiten. Dies, kombiniert mit "Freading" und "Fwrite", hat alles super geklappt. Ich habe versucht, 'ff' zu verwenden, bevorzuge aber das erstere. 4K-Lese- / Schreibgeschwindigkeiten können jedoch zu Problemen führen. Das Sichern einer Viertelmillion 1k-Dateien (im Wert von 250 MB) von der SSD auf dem Plattenteller kann Stunden dauern. Soweit mir bekannt ist, ist noch kein R-Paket verfügbar, mit dem der Chunkifizierungsprozess automatisch optimiert werden kann. Schauen Sie sich beispielsweise an, wie viel RAM ein Benutzer hat. Testen Sie die Lese- / Schreibgeschwindigkeiten des RAM / aller angeschlossenen Laufwerke und schlagen Sie dann ein optimales Chunkification-Protokoll vor. Dies könnte zu erheblichen Workflow-Verbesserungen / Ressourcenoptimierungen führen. zB teilen Sie es auf ... MB für den RAM -> teilen Sie es auf ... MB für die SSD -> teilen Sie es auf ... MB auf dem Plattenteller -> teilen Sie es auf ... MB auf dem Band. Es könnte Datensätze im Voraus abtasten, um einen realistischeren Messstab für die Arbeit zu erhalten.
Viele der Probleme, an denen ich in R gearbeitet habe, betreffen die Bildung von Kombinations- und Permutationspaaren, Tripeln usw., was das begrenzte RAM nur zu einer größeren Einschränkung macht, da sie sich häufig irgendwann zumindest exponentiell ausdehnen. Dies hat mich dazu gebracht, viel Aufmerksamkeit auf die Qualität im Gegensatz zur Quantität der Informationen zu richten, die zunächst in sie eingehen, anstatt zu versuchen, sie anschließend zu bereinigen, und auf die Abfolge der Vorgänge bei der Vorbereitung der Informationen (beginnend mit) die einfachste Operation und Erhöhung der Komplexität); zB Teilmenge, dann Zusammenführen / Verbinden, dann Kombinationen / Permutationen bilden usw.
In einigen Fällen scheint die Verwendung von Lesen und Schreiben auf Basis R einige Vorteile zu haben. Zum Beispiel ist die Fehlererkennung in 'fread' so gut, dass es schwierig sein kann, wirklich unordentliche Informationen in R zu bekommen, um sie zu bereinigen. Base R scheint auch viel einfacher zu sein, wenn Sie Linux verwenden. Base R scheint unter Linux gut zu funktionieren, Windows 10 benötigt ~ 20 GB Speicherplatz, während Ubuntu nur wenige GB benötigt, der mit Ubuntu benötigte RAM ist etwas niedriger. Bei der Installation von Paketen von Drittanbietern in (L) Ubuntu sind mir jedoch zahlreiche Warnungen und Fehler aufgefallen. Ich würde nicht empfehlen, sich zu weit von (L) Ubuntu oder anderen Aktiendistributionen mit Linux zu entfernen, da Sie so viel Gesamtkompatibilität verlieren können, dass der Prozess fast sinnlos wird (ich denke, dass 'Unity' in Ubuntu ab 2017 abgebrochen werden soll ).
Hoffentlich hilft einiges davon anderen.