7

I am running code to produce outputs where I want all the outputs to be printed with 1 decimal place. However the code uses functions which I use generally and I don't want to specify within these that the printed output is rounded.

The answers to this question Formatting Decimal places in R suggest using options(digits=2) or round(x, digits=2).

The first option is a general setting which is great for rounding 1.234 to 1.2 but would print 12.345 as 12

The second option would work if put within the function but I don't want to touch them. How to set this generally?

Cœur
  • 37,241
  • 25
  • 195
  • 267
BuckyOH
  • 327
  • 2
  • 8
  • 17

2 Answers2

8

You could do this:

print <- function(x, ...) {
    if (is.numeric(x)) base::print(round(x, digits=2), ...) 
    else base::print(x, ...)
}
Matthew Plourde
  • 43,932
  • 7
  • 96
  • 113
  • Thanks for your suggestion. In attempting this I arrived at the same problem as setting options(digits=2) - `#load print function x <- 12.34 z = print(x) [1] 12` - Is there something i'm missing? – BuckyOH Jun 27 '12 at 16:08
  • 1
    did you reset the `digits` option to its default? try it again in a fresh session. – Matthew Plourde Jun 27 '12 at 16:13
5

I like formatC for printing numbers with a specified number of decimal places. That way, 1 should always be printed as "1.0" when digits = 1 and format = "f". You can create an S3 print method for objects of class numeric such as the following:

print.numeric<-function(x, digits = 1) formatC(x, digits = digits, format = "f")

print(1)
# [1] "1.0"

print(12.4)
# [1] "12.4"

print(c(1,4,6.987))
# [1] "1.0" "4.0" "7.0"

print(c(1,4,6.987), digits = 3)
# [1] "1.000" "4.000" "6.987"
BenBarnes
  • 19,114
  • 6
  • 56
  • 74