[R] number of decimal

David Winsemius dwinsemius at comcast.net
Thu Jan 28 17:04:25 CET 2010


On Jan 28, 2010, at 10:55 AM, Marc Schwartz wrote:

> Ivan,
>
> The default behavior for print()ing objects to the console in an R  
> session is via the use of the print.* methods. For real numerics,  
> print.default() is used and the format is based upon the number of  
> significant digits, not the number of decimal places. There is also  
> an interaction with par("scipen"), which influences when scientific  
> notation is used. See ?print.default for more information on  
> defaults and behavior, taking note of the 'digits' argument, which  
> is influenced by options("digits").
>
> Importantly, you need to differentiate between how R stores numeric  
> real values and how it displays or prints them. Internally, R stores  
> real numbers using a double precision data type by default.
>
> The internal storage is not truncated by default and is stored to  
> full precision for doubles, within binary representation limits. You  
> can of course modify the values using functions such as round() or  
> truncate(), etc. See ?round for more information.
>
> For display, Peter has already pointed you to sprintf() and related  
> functions, which allow you to format output for "pretty printing" to  
> things like column aligned tables and such. Those do not however,  
> affect the default output to the R console.

If one alters print.default, one can get different behavior, for  
instance:

print.default <- function (x, digits = NULL, quote = TRUE, na.print =  
NULL, print.gap = NULL,
     right = FALSE, max = NULL, useSource = TRUE, ...)
{if (is.numeric(x)) {x <- as.numeric(sprintf("%7.3f", x))}
     noOpt <- missing(digits) && missing(quote) && missing(na.print) &&
         missing(print.gap) && missing(right) && missing(max) &&
         missing(useSource) && length(list(...)) == 0L
     .Internal(print.default(x, digits, quote, na.print, print.gap,
         right, max, useSource, noOpt))
}

This will have the requested effect for numeric vectors, but does not  
seem to be altering the behavior of print.data.frame().

 > print(ac2)
        score pt times trt
1  28.825139  1     0   1
2  97.458521  1     3   1
3  26.217289  1     6   1
4  80.636507  2     0   1
5  99.729364  2     3   1
6  85.812312  2     6   1
7   2.515870  3     0   1
8   3.893545  3     3   1
9  55.666848  3     6   1
10 21.966027  4     0   1
 > print(ac2$score)
  [1] 28.825 97.459 26.217 80.637 99.729 85.812  2.516  3.894 55.667  
21.966


>
> HTH,
>
> Marc Schwartz
>
>
> On Jan 28, 2010, at 9:21 AM, Ivan Calandra wrote:
>
>> It looks to me that it does more or less the same as format().
>>
>> Maybe I didn't explain myself correctly then. I would like to set  
>> the number of decimal by default, for the whole R session, like I  
>> do with options(digits=6). Except that digits sets up the number of  
>> digits (including what is before the "."). I'm looking for some  
>> option that will let me set the number of digits AFTER the "."
>>
>> Example: I have 102.33556677 and 2.999555666
>> If I set the number of decimal to 6, I should get: 102.335567 and  
>> 2.999556.
>> And that for all numbers that will be in/output from R (read.table,  
>> write.table, statistic tests, etc)
>>
>> Or is it that I didn't understand everything about formatC() and  
>> sprintf()?
>>
>> Thanks again
>> Ivan
>>
>> Le 1/28/2010 15:12, Peter Ehlers a écrit :
>>> ?formatC
>>> ?sprintf
>>>
>>> Ivan Calandra wrote:
>>>> Hi everybody,
>>>>
>>>> I'm trying to set the number of decimals (i.e. the number of  
>>>> digits after the "."). I looked into options but I can only set  
>>>> the total number of digits, with options(digits=6). But since I  
>>>> have different variables with different order of magnitude, I  
>>>> would like that they're all displayed with the same number of  
>>>> decimals.
>>>> I searched for it and found the format() function, with nsmall=6,  
>>>> but it is for a given vector. I would like to set it for the  
>>>> whole session, as with options.
>>>>
>>>> Can anyone help me?
>>>> Thanks in advance
>>>> Ivan
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

David Winsemius, MD
Heritage Laboratories
West Hartford, CT



More information about the R-help mailing list