2013-03-16 13 views
9

Wpadłem na problem z funkcją fread() z pakietu data.table. Wiem, że to wciąż eksperymentalne, ale może gdzieś popełniam błąd.Czytanie pliku CSV z nazwą wiersza przez fread()

Oto powtarzalne przykład:

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

daje błąd:

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

i boczne pytanie: Dlaczego miałbym kiedykolwiek opuścić row.names=TRUE w write.csv pytanie? Do tej pory miałem z tym tylko problemy, ponieważ dodawałem jedną nienazwaną kolumnę do danych.

Thx.

Odpowiedz

7

Jako obejście można przeczytać rownames jako nowej kolumny, ustawiając 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 

Z pomocą fread, wygląda, że ​​wszystkie przykłady korzystania row.names=FALSE, tak jak wspomniałem to działa dobrze:

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

A co z użytecznością 'row.names = TRUE'? :) – krhlk

+1

@tomaskrehlik dobre pytanie :) osobiście nie używam go ... może dla ludzkiej czytelności pliku .. – agstudy

+2

@tomaskrehlik Podobnie jak agstudy nie używam rownames albo naprawdę. Dla kompletności dodałem element todo, aby się nimi zająć i link do tego pytania. Dziękuję za wyróżnienie. –