2016-06-16 18 views
5

Ich lese Daten aus einer CSV-Datei mit data.table::fread auf einem Windows 10-Computer. Die Daten werden ordnungsgemäß durch read.csv eingelesen; Wenn ich jedoch fread verwenden, um die Daten einzulesen, enden alle abschließenden Spalten in jeder Zeile der resultierenden data.table in \r, was vermutlich auf einen Wagenrücklauf hinweist. Dies führt dazu, dass numerische Felder einen Zeichentyp erhalten. (Anstelle eines numerischen Literals 4.53 enthält eine Zelle mit Zeilenende ein Zeichenliteral 4.53\r.)Warum gibt der Einfügeschlaufe für das Einfügen von fread ( r) in data.table zurück?

Warum tritt dieser Fehler auf? Gibt es eine Möglichkeit, dies direkt durch den Funktionsaufruf fread zu lösen?

aktualisieren

ich folgendes erhalten, wenn der verbose = TRUE Parameter

Input contains no \n. Taking this to be a filename to open 
File opened, filesize is 0.000001 GB. 
Memory mapping ... ok 
Detected eol as \n only (no \r afterwards), the UNIX and Mac standard. 
Positioned on line 1 after skip or autostart 
This line is the autostart and not blank so searching up for the last non-blank ... line 1 
Detecting sep ... ',' 
Detected 7 columns. Longest stretch was from line 1 to line 13 
Starting data input on line 1 (either column names or first row of data). First 10 characters: subjectNum 
All the fields on line 1 are character fields. Treating as the column names. 
Count of eol: 13 (including 1 at the end) 
Count of sep: 72 
nrow = MIN(nsep [72]/ncol [7] -1, neol [13] - nblank [1]) = 12 
Type codes ( first 5 rows): 1131414 
Type codes: 1131414 (after applying colClasses and integer64) 
Type codes: 1131414 (after applying drop or select (if supplied) 
Allocating 7 column slots (7 - 0 dropped) 
Read 12 rows. Exactly what was estimated and allocated up front 
    0.000s ( 0%) Memory map (rerun may be quicker) 
    0.001s (33%) sep and header detection 
    0.000s ( 0%) Count rows (wc -l) 
    0.002s (67%) Column type detection (first, middle and last 5 rows) 
    0.000s ( 0%) Allocation of 12x7 result (xMB) in RAM 
    0.000s ( 0%) Reading data 
    0.000s ( 0%) Allocation for type bumps (if any), including gc time if triggered 
    0.000s ( 0%) Coercing data already read in type bumps (if any) 
    0.000s ( 0%) Changing na.strings to NA 
    0.003s  Total 
+0

Sie können versuchen, ein reproduzierbares Beispiel wie 'fread (" a \ n1 \ r \ n2 \ r \ n ")' vielleicht? In diesem Fall sind die End-of-Line-Indikatoren inkonsistent und führen zu dem angezeigten Verhalten. – Frank

+0

Dies führt tatsächlich zu dem Fehler in R. Wenn ich die Datei in Notepad ++ lese, hat die Datei ein LF nur in der ersten Zeile und CR LF (\ r \ n) in nachfolgenden Zeilen. Bitte zögern Sie nicht, eine Antwort zu senden, damit ich Ihre Antwort akzeptieren kann. – Bob

+0

Wissen Sie, ob dies bei CSV-Dateien häufig vorkommt? – Bob

Antwort

6

verwendet wird Wenn Sie eine Datei, die wie x="a\n1\r\n2\r\n" aussieht, dann fread(x) wird das Ergebnis geben beschrieben:

 a 
1: 1\r 
2: 2\r 

Dies geschieht aufgrund der End-of-Line-Indikatoren sind über die Grenzen inkonsistent.

Ich habe gehört, dass dies mit anderen passiert, aber ich bin mir nicht sicher, woher es kommt oder ob es eine bessere Möglichkeit gibt, als die Datei zu "reparieren", wahrscheinlich mit einem Befehlszeilentool.

+0

Ich glaube, ich habe jemanden mit diesem Problem auf der Mailing-Liste oder Github gesehen, kann aber den Link nicht finden. – Frank

+1

Es ist mir passiert, als ich Daten mit Python erstellt, den Header mit '\ n' in Windows hart-codiert. [python os.linesep] (http://stackoverflow.com/questions/1223289) – user3226167