2016-08-09 3 views
1

Ich versuche, eine 3Gb CSV-Datei in R zu laden und ich die folgende Warnung erhalten:Wie Speicher in R zu erhöhen?

Warnmeldungen:

1: Im Scan (Datei, was, nmax, sep, Dezember, zitat, überspringen, nlines, na.strings,: Erreichte Gesamtzuweisung von 7128Mb: siehe Hilfe (memory.size)

2: Im Scan (Datei, was, nmax, sep, dez, zitat, überspringen, nlines, na.strings, : Erreichte Gesamtzuweisung von 7128Mb: siehe Hilfe (memory.size)

Ich habe versucht, dies zu tun:

memory.size()

[1] 766,68

memory.limit()

[1] 7128

Aber immer noch meine Datei wird nicht geladen und ich bekomme immer diese Warnung. Gibt es eine Möglichkeit, wie ich diese Datei in R lesen kann?

Vielen Dank!

+1

Ich habe Leute gesehen vorschlagen 'fread()' in der Vergangenheit, könnte einen Blick wert sein. Auch 'gc()' könnte mit dem Fehler helfen, wenn Garbage Collection nicht stattfindet. – zacdav

+1

@zacdav .. Vielen Dank :) Ich habe> install.packages ("data.table") > Bibliothek (data.table)> fread ("Datei.csv ", sep =", ", stringsAsFactors = FALSE) – Sweta

+0

Der beste Teil ist es zeigt auch die Zeit _Read 74180464 Zeilen und 11 (von 11) Spalten von 2.980 GB Datei in 00: 08: 34_ – Sweta

Antwort

1

R kann beim Laden großer Datensätze unglaublich speicherineffizient sein. Von der documentation:

Speichernutzung

Diese Funktionen können eine überraschende Menge an Speicher verwenden, wenn große Dateien zu lesen. Im Handbuch "R Data Import/Export", das die Anmerkungen hier ergänzt, wird ausführlich diskutiert.

Weniger Speicher wird verwendet, wenn colClasses als eine der sechs atomaren Vektorklassen angegeben wird. Dies kann insbesondere beim Lesen einer Spalte, die viele verschiedene numerische Werte verwendet, so sein, da das Speichern von jedem eindeutigen Wert als eine Zeichenkette bis zu 14 mal so viel Speicherplatz wie eine ganze Zahl als speichern kann.

Die Verwendung von "nrows", auch als geringfügige Überschätzung, hilft bei der Speichernutzung.

Mit comment.char = "" wird deutlich schneller als die read.table Standard.

read.table ist nicht das richtige Werkzeug zum Lesen von großen Matrizen, insbesondere solche mit vielen Spalten: Es wurde entwickelt, um Datenrahmen zu lesen, die Spalten sehr unterschiedlicher Klassen haben können. Verwenden Sie stattdessen die Suche nach Matrizen.

Verwandte Themen