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?
You could do this:
print <- function(x, ...) {
if (is.numeric(x)) base::print(round(x, digits=2), ...)
else base::print(x, ...)
}
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"