Wie erstelle ich einen großen Datenrahmen in R mit oder ohne zuerst eine Matrix zu erstellen und sie dann in einen dat.frame umzuwandeln?

8

Ich muss eine Matrix mit 80000 Zeilen und 80000 Spalten erstellen. Aber nach dem Lesen von Rbloggern habe ich erfahren, dass die Anzahl der Elemente in einer Matrix 2 ^ 31 - 1 nicht überschreiten kann. Mein Plan, dieses Problem für meinen speziellen Algorithmus zu vermeiden, besteht darin, einen Datenrahmen anstelle einer Matrix zu verwenden. Gibt es eine Möglichkeit, einen leeren Datenrahmen der Dimension 80000 x 80000 zu erstellen, ohne zuerst eine Matrix zu erstellen und dann mit as.data.frame wie unten in einen dat.frame umzuwandeln?

%Vor%     
DataBasterd 06.06.2015, 00:07
quelle

1 Antwort

4

Sie könnten einen leeren Datenrahmen der Größe 80.000 x 80.000 wie folgt konstruieren:

%Vor%

Im Grunde erstellen Sie eine Liste mit jeder Spalte des Datenrahmens, den Sie erstellen möchten (Ich habe die Liste mit replicate mit simplify=FALSE erstellt) und dann erstellen Sie daraus einen Datenrahmen mit do.call und dem data.frame Funktion.

Einige Anmerkungen:

  1. Sie sollten besser mehrere Dutzend Gigabyte Speicher haben, um die Möglichkeit zu haben, diese in den Speicher Ihres Computers einzupassen (mein R-Prozess zeigt 48 GB zugewiesenen Speicher an).
  2. Dies wird viel langsamer als die Matrixzuweisung sein; für den 8000 x 8000 Fall dauerte die Datenrahmenkonstruktion 36 Sekunden und die Matrixkonstruktion dauerte 1 Sekunde. Es dauerte 54 Minuten, bis der Daten-Voll-Datenrahmen zugeordnet war.
  3. Wenn Ihre Daten spärlich sind, ist dies eine verschwenderische Option, und Sie sollten eine spärliche Matrix verwenden.

Obwohl die Zuweisung einer Matrix dieser Größe bei der Zuweisung in 64-Bit-Linux (R-Version 3.2.0) nicht fehlgeschlagen ist, scheinen grundlegende Operationen nicht zu funktionieren:

%Vor%     
josliber 06.06.2015 00:37
quelle

Tags und Links