Форматирование десятичных знаков в R - PullRequest
226 голосов
/ 09 августа 2010

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

x <- 1.128347132904321674821

РЕДАКТИРОВАТЬ:

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

options(digits=2)

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

-

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

Ответы [ 12 ]

334 голосов
/ 27 августа 2012

Справочная информация: Некоторые ответы, предложенные на этой странице (например, 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"
26 голосов
/ 16 марта 2016

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

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

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

20 голосов
/ 29 мая 2015

Вы можете попробовать мой пакет 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
14 голосов
/ 15 января 2018

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

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

, что дает

[1] "5.50"

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

6 голосов
/ 10 августа 2010

Проверка функций prettyNum, формат

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

5 голосов
/ 10 августа 2010

Примерно так:

options(digits=2)

Параметр определения цифр:

digits: controls the number of digits to print when printing numeric values.
4 голосов
/ 10 августа 2010

Если вы предпочитаете значащие цифры фиксированным, тогда может быть полезна команда signif :

> signif(1.12345, digits = 3)
[1] 1.12
> signif(12.12345, digits = 3)
[1] 12.1
> signif(12345.12345, digits = 3)
[1] 12300
3 голосов
/ 27 апреля 2013

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

2 голосов
/ 14 апреля 2014

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

# format numeric value to K decimal places
formatDecimal <- function(x, k) format(round(x, k), trim=T, nsmall=k)
2 голосов
/ 10 августа 2010

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

...