[R] How to get read.table() or scan() to report line on which error occurs

David Clunie dclunie at dclunie.com
Thu Jan 24 15:38:08 CET 2013


Please excuse this naive question, but I have search the FAQs and lists
and web for an answer but not found one.

I have a text file of several hundred thousand rows and somewhere in the middle
there is a malformed row.


   mydata<-read.table("mydata.dat", header=FALSE, sep=" ",
     col.names=mydatacolnames, colClasses=mydatacolclasses, row.names="hash")

results in:

   Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  :
     scan() expected 'a real', got 'MONOCHROME2'
   Calls: read.table -> scan
   Execution halted

which is not very helpful, since it does not report where the error occurs,
and searching for the offending string does not always help because it may
occur many times.

I know that I can do a:

   count.fields("mydata.dat", sep=" ")

and trawl through the results to find a row that does not have the same number
of fields, and that worked on this occasion just fine.

But I would like to know for next time if there is an easier way to just command
read.table() or scan() to give a more helpful message in the first place?

Thanks ... David

More information about the R-help mailing list