Re: [Rd] write.table inconsistency (PR#7403)

From: <maechler_at_stat.math.ethz.ch>
Date: Sat 04 Dec 2004 - 23:52:06 EST


>>>>> "Duncan" == Duncan Murdoch <murdoch@stats.uwo.ca>
>>>>> on Sat, 4 Dec 2004 01:55:26 +0100 (CET) writes:

    Duncan> There's an as.matrix() call in write.table that means the formatting
    Duncan> of numeric columns changes depending on whether there are any
    Duncan> non-numeric columns in the table or not.  

yes, I think I had seen this (a while ago in the source code) and then wondered if one shouldn't have used

   data.matrix() instead of as.matrix() - something I actually do advocate more generally, as "good programming style". It also does solve the problem in the example here -- HOWEVER, the lines *before* as.matrix() have

    ## as.matrix might turn integer or numeric columns into a complex matrix     cmplx <- sapply(x, is.complex)
    if(any(cmplx) && !all(cmplx)) x[cmplx] <- lapply(x[cmplx], as.character)     x <- as.matrix(x)

which makes you see that write.table(.) should also work when the data frame has complex variables {or some other kinds of non-numeric as you've said above} -- something which data.matrix() can't handle....
As soon as you have a complex or a character variable (together with others) in your data.frame, as.matrix() will have to return "character" and apply format() to the numeric variables, as well...

So, to make this consistent in your sense, i.e. formatting of a column shouldn't depend on the presence of other columns, we can't use as.matrix() nor data.matrix() but have to basically replicate an altered version of as.matrix inside write.table.

I propose to do this, but expose the altered version as ink1">something like

   as.charMatrix(.)

>>>>>>>>>>>>>and replace the 4 lines {of code in write.table()} above by the >single line

   as.charMatrix(x)

--
Martin

Martin

______________________________________________
R-devel@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Received on Sat Dec 04 23:58:58 2004

This archive was generated by hypermail 2.1.8 : Sun 05 Dec 2004 - 01:21:51 EST