Max, So it's not particularly readable, but I suspect it could be much faster ...
#mydf is the data.frame args = as.list(mydf) args$sep = " , " out = paste(do.call("paste", args), collapse="\n") cat(out, file=myfilename) Hope that helps, ~G On Sat, Apr 21, 2012 at 12:59 PM, Barry Rowlingson < b.rowling...@lancaster.ac.uk> wrote: > On Sat, Apr 21, 2012 at 3:28 PM, Max Kuhn <mxk...@gmail.com> wrote: > > For a package, I need to write a csv version of a data set to an R > > object. Right now, I use: > > > > out <- capture.output( > > write.table(x, > > sep = ",", > > na = "?", > > file = "", > > quote = FALSE, > > row.names = FALSE, > > col.names = FALSE)) > > > > To me, this is fairly slow; 131 seconds for a data frame with 8100 > > rows and 1400 columns. > > > > The data will be in a data frame; I know write.table() would be faster > > with a matrix. I was looking into converting the data frame to a > > character matrix using as.matrix() or, better yet, format() prior to > > the call above. However, I'm not sure what an appropriate value of > > 'digits' should be so that the character version of numeric data has > > acceptable fidelity. > > > > I also tried using a text connection and sink() as shown in > > ?textConnection but there was no speedup. > > > > You could try a loop over each row, and use 'paste' to join each > element in a row by commas. Then use 'paste' again to join everything > you've got (a vector of rows) by a '\n' character. > > something like: paste(apply(x,1,paste,collapse=","),collapse="\n") # > untested > > you probably also want to stick a final \n on it. > > Is it faster? I don't know! > > Barry > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > -- Gabriel Becker Graduate Student Statistics Department University of California, Davis [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel