BuckyOH
BuckyOH

Reputation: 347

Setting default number of decimal places for printing

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?

Upvotes: 8

Views: 22630

Answers (2)

BenBarnes
BenBarnes

Reputation: 19454

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"

Upvotes: 7

Matthew Plourde
Matthew Plourde

Reputation: 44614

You could do this:

print <- function(x, ...) {
    if (is.numeric(x)) base::print(round(x, digits=2), ...) 
    else base::print(x, ...)
}

Upvotes: 8

Related Questions