Установка по умолчанию числа десятичных знаков для печати

Я запускаю код для вывода выходов, где я хочу, чтобы все выходы печатались с 1 десятичной точкой. Однако код использует функции, которые я использую в целом, и я не хочу указывать в них, что печатный результат округлен.

Ответы на этот вопрос Форматирование десятичных знаков в R предлагают использовать options(digits=2) или round(x, digits=2).

Первый вариант - это общий параметр, который отлично подходит для округления 1.234 до 1.2, но печатает 12.345 как 12

Второй вариант будет работать, если поместить внутри функции, но я не хочу прикасаться к ним. Как установить это в целом?

Ответ 1

Вы можете сделать это:

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

Ответ 2

Мне нравится formatC для печати чисел с заданным количеством знаков после запятой. Таким образом, 1 всегда следует печатать как "1.0", когда digits = 1 и format = "f". Вы можете создать метод печати S3 для объектов класса, таких как:

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"