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
  • 34,719
  • 24
  • 185
  • 251
BuckyOH
  • 317
  • 2
  • 7
  • 16

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
  • 42,659
  • 5
  • 91
  • 112
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
  • 18,616
  • 6
  • 55
  • 72