mwtoews at sfu.ca
2006-Jun-29 16:21 UTC
[Rd] write.table does not quote col.names properly (PR#9044)
Full_Name: Michael Toews Version: 2.3.1 OS: Mac OS 10.4.6 and WinXP/SP2 Submission from: (NULL) (24.80.163.133) This bug also affects related functions (write.csv, etc.), and can be demonstrated using either a matrix or data frame: m <- matrix(1:9,nrow=3, dimnames=list(c("A","B","C"), c("I","II","III"))) write.table(m) write.table(m,col.names=FALSE) write.table(m,row.names=FALSE) Note that the last 'write.table' call has unquoted column headers. A suggested fix for this problem is: Index: write.table.R ==================================================================--- write.table.R (revision 38447) +++ write.table.R (working copy) @@ -86,9 +86,8 @@ if(!is.null(col.names)) { if(append) warning("appending column names to file") - if(length(quote)) - col.names <- paste("\"", gsub('"', qstring, col.names), - "\"", sep = "") + col.names <- paste("\"", gsub('"', qstring, col.names), + "\"", sep = "") writeLines(paste(col.names, collapse = sep), file, sep = eol) } However, it is unknown why the "if(length(quote))" is used in the original code (please check before a commit). The length of quote will be 0 here, since the matrix has all numbers. This bug does not occur with a data frame with mixed number and factor/character columns. +mt
ripley at stats.ox.ac.uk
2006-Jul-05 12:22 UTC
[Rd] write.table does not quote col.names properly (PR#9044)
As this is documented to quote nothing if quote=FALSE, the patch is incorrect. We need to handle quoting of colunm names separately. Fixed for 2.3.1 patched. On Thu, 29 Jun 2006, mwtoews at sfu.ca wrote:> Full_Name: Michael Toews > Version: 2.3.1 > OS: Mac OS 10.4.6 and WinXP/SP2 > Submission from: (NULL) (24.80.163.133) > > > This bug also affects related functions (write.csv, etc.), and can be > demonstrated using either a matrix or data frame: > > m <- matrix(1:9,nrow=3, > dimnames=list(c("A","B","C"), > c("I","II","III"))) > > write.table(m) > write.table(m,col.names=FALSE) > write.table(m,row.names=FALSE) > > Note that the last 'write.table' call has unquoted column headers. A suggested > fix for this problem is: > > Index: write.table.R > ==================================================================> --- write.table.R (revision 38447) > +++ write.table.R (working copy) > @@ -86,9 +86,8 @@ > if(!is.null(col.names)) { > if(append) > warning("appending column names to file") > - if(length(quote)) > - col.names <- paste("\"", gsub('"', qstring, col.names), > - "\"", sep = "") > + col.names <- paste("\"", gsub('"', qstring, col.names), > + "\"", sep = "") > writeLines(paste(col.names, collapse = sep), file, sep = eol) > } > > > However, it is unknown why the "if(length(quote))" is used in the original code > (please check before a commit). The length of quote will be 0 here, since the > matrix has all numbers. > This bug does not occur with a data frame with mixed number and factor/character > columns. > +mt > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > >-- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595