Setting default number of decimal places for print

2020-02-09 11:35发布

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?

标签: r decimal
2条回答
戒情不戒烟
2楼-- · 2020-02-09 12:32

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"
查看更多
一夜七次
3楼-- · 2020-02-09 12:37

You could do this:

print <- function(x, ...) {
    if (is.numeric(x)) base::print(round(x, digits=2), ...) 
    else base::print(x, ...)
}
查看更多
登录 后发表回答