On 09/28/2011 09:23 AM, Mehmet Suzen wrote:

This might be obvious but I was wondering if anyone knows quick and easy
way of writing out a CSV file with varying row lengths, ideally an
initial data read from a CSV file which has the same format. See example
below.


I found it quite strange that R cannot write it in one go, so one must
append blocks or post-process the file, is this true? (even Ruby can do
it!!)

Otherwise it puts ,"","" or similar for missing column values in the
shorter length rows and fill=FALSE option do not work!

I don't want to post-process if possible.

See this post:
http://r.789695.n4.nabble.com/Re-read-csv-trap-td3301924.html

Example that generated Error!

writeLines(c("A,B,C,D",
              "1,a,b,c",
              "2,f,g,c",
              "3,a,i,j",
              "4,a,b,c",
              "5,d,e,f",
              "6,g,h,i,j,k,l,m,n"),
            con=file("test.csv"))

read.csv("test.csv")
try(read.csv("test.csv",fill=FALSE))

Hi Mehmet,
The example doesn't need to call "file", writeLines does it for you. It worked for me:

 writeLines(c("A,B,C,D",
              "1,a,b,c",
              "2,f,g,c",
              "3,a,i,j",
              "4,a,b,c",
              "5,d,e,f",
              "6,g,h,i,j,k,l,m,n"),
            con="test.csv")

and to get the original object back, use:

readLines("test.csv")

The reason you can't use read.csv is that it returns a data frame, and that object can't have elements of unequal length. If you want an object with elements of unequal length, try:

as.list(readLines("test.csv"))

Jim

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to