Форматирование десятичных знаков в R

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

x <- 1.128347132904321674821

EDIT:

использование:

options(digits=2)

было предложено в качестве возможного ответа. Есть ли способ указать это в скрипте для одноразового использования? Когда я добавляю его в свой скрипт, он, похоже, не делает ничего другого, и мне не интересно много перепечатывать для форматирования каждого номера (я автоматизирую очень большой отчет).

--

ответ: круглый (x, цифры=2)

12 ответов


Справочная информация: некоторые ответы, предложенные на этой странице (например,signif, options(digits=...)) не гарантируют, что определенное количество десятичных знаков, отображаемых для произвольного числа. Я предполагаю, что это особенность дизайна в R, где хорошая научная практика включает показ определенного количества цифр, основанных на принципах "значащие цифры". Однако, во многих областях (например, Стиль APA, бизнес-отчеты) требования диктуют, что отображается определенное количество знаков после запятой. Это часто делается в целях обеспечения последовательности и стандартизации, а не для того, чтобы иметь дело со значительными цифрами.

решение:

следующий код показывает ровно два десятичных знака для числа x.

format(round(x, 2), nsmall = 2)

например:

format(round(1.20, 2), nsmall = 2)
# [1] "1.20"
format(round(1, 2), nsmall = 2)
# [1] "1.00"
format(round(1.1234, 2), nsmall = 2)
# [1] "1.12"

более общая функция выглядит следующим образом, где x это число и k - это количество десятичных разрядов для отображения. trimws удаляет любое ведущее пустое пространство, которое может быть полезно, если у вас есть вектор чисел.

specify_decimal <- function(x, k) trimws(format(round(x, k), nsmall=k))

Е. Г.,

specify_decimal(1234, 5)
# [1] "1234.00000"
specify_decimal(0.1234, 5)
# [1] "0.12340"

вы можете отформатировать число, скажем x, до десятичных знаков, как вы хотите. Вот!--1--> ряд со многими десятичными знаками. Предположим, мы хотим показать до 8 десятичных знаков этого числа:

x = 1111111234.6547389758965789345
y = formatC(x, digits = 8, format = "f")
# [1] "1111111234.65473890"

здесь format="f" дает плавающие числа в обычных десятичных знаках, скажем, xxx.xxx, и digits указывает количество цифр. Напротив, если вы хотите получить целое число для вывода вы должны использовать format="d" (как sprintf).


вы можете попробовать мой пакет formattable.

> # devtools::install_github("renkun-ken/formattable")
> library(formattable)
> x <- formattable(1.128347132904321674821, digits = 2, format = "f")
> x
[1] 1.13

хорошая вещь, x по-прежнему числовой вектор, и вы можете делать больше вычислений с тем же форматированием.

> x + 1
[1] 2.13

еще лучше, цифры не теряются, вы можете переформатировать с большим количеством цифр в любое время:)

> formattable(x, digits = 6, format = "f")
[1] 1.128347

для 2 десятичных знаков, предполагая, что вы хотите сохранить конечные нули

sprintf(5.5, fmt = '%#.2f')

что дает

[1] "5.50"

Как упоминает @mpag ниже, кажется, R иногда может давать неожиданные значения с этим и круглым методом, например sprintf (5.5550, fmt='%#.2f') дает 5.55, а не 5.56


проверить функции prettyNum, формат

для проверки нулей (например, 123.1240) используйте sprintf(x, fmt='%#.4g')


что-то вроде этого :

options(digits=2)

определение варианта цифр :

digits: controls the number of digits to print when printing numeric values.

ну, два, которые приходят на ум

fixed(1.128347132904321674821, digits=2)

или, если вы предпочитаете серьезных цифр фиксированные цифры тогда;

signif(1.128347132904321674821,digits=3)

функции formatC() может использоваться для форматирования числа до двух знаков после запятой. Две десятичных знака задаются этой функцией, даже если результирующие значения включают конечные нули.


обратите внимание, что числовые объекты в R хранятся с двойной точности, который дает вам (примерно) 16 десятичных цифр точности - остальное шум. Я допускаю, что число, показанное выше, вероятно, только для примера, но оно имеет длину 22 цифры.


Я использую этот вариант для принудительной печати K десятичных знаков:

# format numeric value to K decimal places
formatDecimal <- function(x, k) format(round(x, k), trim=T, nsmall=k)

Мне кажется, было бы что-то вроде

library(tutoR)
format(1.128347132904321674821, 2)

В немного справке.


Если вы просто хотите округлить число или список, просто использовать

round(data, 2)

затем данные будут округлены до 2 знаков после запятой.