2013-09-26 13 views
5

Ich habe eine 700mb .dta Stata mit 28 Millionen Beobachtungen und 14 Spaltenvariablenmemisc mit Stata importieren .dta in R-Datei

Wenn ich laufe ich Datei versuchen zu importieren in R mit foreign's read.dta() Funktion aus meinem Arbeitsspeicher auf meinem 8-GB-Rechner (Seitenausfälle schießen sehr schnell in GBs).

staph <- read.dta("Staph_1999_2010.dta") 

Ich suchte herum und es klingt wie eine effizientere Alternative, um die Stata.file() Funktion aus dem memisc package zu verwenden wäre.

Als ich nennen:

staph <- Stata.file("Staph_1999_2010.dta") 

ich segfault erhalten:

*** caught segfault *** 
address 0xd5d2b920, cause 'memory not mapped' 

Traceback: 
1: .Call("dta_read_labels", bf, lbllen, padding) 
2: dta.read.labels(bf, len.lbl, 3) 
3: get.dictionary.dta(dta) 
4: Stata.file("Staph_1999_2010.dta") 

finde ich die Dokumentation für Stata.file() schwer zu folgen.

(1) Verwende ich Stata.file() richtig?

(2) Liefert Stata.file() einen Datenrahmen wie read.dta() zurück?

(3) Wenn ich Stata.file() richtig verwende, wie kann ich den Fehler beheben, den ich bekomme?

+0

kauft mehr Speicher zu halten. Die übliche Faustregel ist, dass Sie dreimal so viel Speicher benötigen wie Ihr größtes Objekt, also 28 * 14 * 10 * 3 = 11760, also sollten Sie wahrscheinlich 16 GB für produktiven Wok mit einem Objekt dieser Größe haben (angesichts der Notwendigkeit von Systemen) Speicher, der wahrscheinlich mehrere Gigs aufnehmen wird –

+0

danke, ich werde diese Optionen in Betracht ziehen, aber würde gerne herausfinden, wie Stata.file() – ptjetty

+0

ich auch segfault, wenn ich eine 100mb dta Datei verwenden – ptjetty

Antwort

0

Mit Zugriff auf Stata, eine Lösung zum Exportieren der. Dta zu .csv in Stata.

use "file.dta" 

export delimited using "file.csv", replace 

und importieren Sie dann in R read.csv oder data.table::fread verwenden.

Andere Ideen:

  • Betrachten wir ein Bit der Daten Abtasten mit sample in Stata Stata des
  • Stata compress versucht, eine verlustfreie Komprimierung von Typen zu ändern (nicht
    sicher, es wäre viel für die CSV-Format speichern und R obwohl).
  • Packen Sie die Daten eng, indem Sie nach Möglichkeit alle Daten oder String-IDs in ganzzahlige Werte umwandeln.
  • eine Wolke Beispiel für einen einmaligen Import verwenden, und die anfängliche Reinigung, vor der Probenahme oder nur den wichtigen Teil
  • Mehr RAM ...