2012-06-27 3 views
7

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

Ответы на этот вопрос Formatting Decimal places in R предлагают использовать options(digits=2) или round(x, digits=2).

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

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

ответ

8

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

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

Спасибо за ваше предложение. В попытке этого я пришел к тому же проблемы, как установка опции (цифры = 2) - '#load функция печати х <- 12,34 г = печать (х) [1] 12' - Есть ли что-то я» m отсутствует? – BuckyOH

+1

Вы сбросили опцию 'digits' до значения по умолчанию? повторите попытку в новой сессии. –

+0

Ну, это неловко, похоже, сейчас работает. Благодарю. – BuckyOH

5

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

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"