Re: [Rd] (PR#8337) formatC adds leading space -- on some Windoze

From: <maechler_at_stat.math.ethz.ch>
Date: Tue 29 Nov 2005 - 09:58:42 GMT


>>>>> "BDR" == Brian Ripley <ripley@stats.ox.ac.uk> >>>>> on Tue, 22 Nov 2005 09:35:19 +0100 (CET) writes:

    BDR> On Tue, 22 Nov 2005 maechler@stat.math.ethz.ch wrote:
    >>>>>>> "KevinW" == Kevin Wright <kwright68@gmail.com>
    >>>>>>> on Mon, 21 Nov 2005 18:13:36 +0100 (CET) writes:

>>
    KevinW> Full_Name: Kevin Wright
    KevinW> Version: 2.2.0
    KevinW> OS: Windows 2000

>> ^^^^^^^
>> this must be part of the problem

    BDR> It is, and it is a known inconsistency with Linux (but I do not consider     BDR> it to be a bug or `wrong behavior' or not `reasonable').

    BDR> Windows always uses three digits for the exponent, e.g. E+001.

    BDR> This results from adjusting the returned result to be more consistent with 
    BDR> other platforms.  (BTW, since width (sic) is a lower bound, it _is_ 
    BDR> respected.)  Even if the layout is not ideal, the results are at least 
    BDR> diff-able against those from other platforms.

yes, and that's good ("diff-able").

Now, after looking in the source (src/appl/strsignif.c), I understand what you mean above: Because Windows libc's sprintf() produces 3-digits exponents *and* because you amended the code to change these back to 2 digits, the extraneous blank is a consequence that one had to live with..

OTOH, the oldest R on Windows I have, "2.0.1 patched (2004-11-27)" does *not* prepend the extra " " and gives the same as on non-windows in some cases, i.e.,

> formatC(pi * 10^(-5:4))
 [1] "3.142e-05" "0.0003142" "0.003142" "0.03142" "0.3142" "3.142"  [7] "31.42" "314.2" "3142" "3.142e+04"

Insofar, the svn r35148 (2005-08-04 18:17:00) change did produce a backward incompatibility. Which is why I confirmed Kevin that this was wrong behavior.

    BDR> If Kevin (or anyone else) wants it done even more     BDR> consistently, he could contribute a patch.

yes, that would be useful.
Particularly, since for some cases formatC() *was* more consistent (see above).

    BDR> Now, we _have_ done that for print(), but it did not seem worth
    BDR> it for formatC (especially as sprintf() is now widely
    BDR> used and would also need to be made consistent).

I agree that sprintf should also be consistent, and I also agree that for "real" programmers sprintf() is probably more useful than formatC() which OTOH is easier to use for simple useRs.

    BDR> (It also did not seem worth it     BDR> given how little credit is given for such work.)

    KevinW> Submission from: (NULL) (170.54.58.4)
>>

    KevinW> Apologies if my expectations (or reading of the man page) are incorrect.
>>

    KevinW> I seem unable to left-justify exponential format
    KevinW> numbers.  There appears to always be an extra space
    KevinW> inserted to the left.

>>

    KevinW> Using the example from the formatC help page:
>>
    R> xx  <- pi * 10^(-5:4)

>>

    R> cbind(formatC(xx, wid = 9, flag = "-"))
    KevinW> [,1]
    KevinW> [1,] " 3.142e-05"
    KevinW> [2,] "0.0003142"
    KevinW> [3,] "0.003142 "
    KevinW> [4,] "0.03142  "
    KevinW> [5,] "0.3142   "
    KevinW> [6,] "3.142    "
    KevinW> [7,] "31.42    "
    KevinW> [8,] "314.2    "
    KevinW> [9,] "3142     "
    KevinW> [10,] " 3.142e+04"

>>
>> which is also not obeying the 'wid' argument.
>>
>> I get something much more reasonable:
>>
>> [,1]
>> [1,] "3.142e-05"
>> [2,] "0.0003142"
>> [3,] "0.003142 "
>> [4,] "0.03142 "
>> [5,] "0.3142 "
>> [6,] "3.142 "
>> [7,] "31.42 "
>> [8,] "314.2 "
>> [9,] "3142 "
>> [10,] "3.142e+04"
>>
>> formatC uses your system's C library printf {that's where the
>> "C" comes from in 'formatC'} which seems to be
>> broken or at least not performing as we think it should.
>>
>> On a "Windows 2003 Server" I have access to, I see the same
>> wrong behavior as above.
>>
>> Martin Maechler, ETH Zurich
>>
>> ______________________________________________
>> R-devel@r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>>
    BDR> -- 
    BDR> Brian D. Ripley,                  ripley@stats.ox.ac.uk
    BDR> Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
    BDR> University of Oxford,             Tel:  +44 1865 272861 (self)
    BDR> 1 South Parks Road,                     +44 1865 272866 (PA)
    BDR> Oxford OX1 3TG, UK                Fax:  +44 1865 272595

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

R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Tue Nov 29 21:04:20 2005

This archive was generated by hypermail 2.1.8 : Tue 29 Nov 2005 - 11:23:14 GMT