2013-03-16 13 views
9

Ich stieß auf ein Problem mit fread() Funktion von data.table Paket. Ich weiß, dass es noch experimentell ist, aber vielleicht mache ich irgendwo einen Fehler.Lesen CSV mit row.names von fread()

ist hier reproduzierbares Beispiel:

library(data.table) 
test <- data.frame(a=rnorm(300), b=rnorm(300)) 
write.csv(test,"a.csv") 
fread("a.csv") 

Gibt einen Fehler:

Error in rbindlist(allargs) : 
    Item 2 has 2 columns, inconsistent with item 1 which has 3 columns 

Und Seite Frage: Warum soll ich jemals verlassen row.names=TRUE in write.csv Frage? Bisher hatte ich nur Probleme damit, weil es den Daten eine unbenannte Spalte hinzufügt.

Thx.

Antwort

7

Als Abhilfe können Sie die rownames als neue Spalte lesen können, von header=FALSE

fread("a.csv",header=FALSE) 
header' changed by user from 'auto' to FALSE 
     V1     V2     V3 
    1:      a     b 
    2: 1 -1.55640470495795 -1.344760319214 
    3: 2 2.89752713867643 2.48413035874463 
    4: 3 -0.493990961968582 0.119727513514055 
    5: 4 0.559770137546773 1.07420769675405 
---           
297: 296 0.585750601363698 -1.59845801200953 
298: 297 -0.867339301988422 0.776738489388772 
299: 298 0.0942821874550108 -0.649440075398178 
300: 299 -0.308039637386426 -0.840171787291445 
301: 300 0.358526722813896 -1.362322309472 

Von Hilfe fread Einstellung sieht es so aus, dass alle Beispiele row.names=FALSE verwenden, so wie Sie diese Werke erwähnt haben in Ordnung:

write.csv(test,"b.csv",row.names=FALSE) 
fread("b.csv") 
+2

Und was ist mit der Nützlichkeit von 'row.names = TRUE'? :) – krhlk

+1

@tomaskrehlik gute frage :) persönlich benutze ich es nicht ... vielleicht für menschliche lesbarkeit der datei .. – agstudy

+2

@tomaskrehlik Wie agstudy verwende ich roynames auch nicht wirklich. Der Vollständigkeit halber habe ich einen Todo-Artikel hinzugefügt, um mit ihnen umzugehen und einen Link zurück zu dieser Frage. Danke für die Hervorhebung. –