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

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

x <- 1.128347132904321674821

ИЗМЕНИТЬ:

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

options(digits=2)

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

-

Ответ: round (x, digits = 2)

Ответ 1

Фон: Некоторые ответы, предлагаемые на этой странице (например, 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"

Ответ 2

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

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

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

Ответ 3

Вы можете попробовать мой пакет 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

Ответ 4

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

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

который дает

[1] "5.50"

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

Ответ 5

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

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

Ответ 6

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

options(digits=2)

Определение опций цифр:

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

Ответ 7

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

> signif(1.12345, digits = 3)
[1] 1.12
> signif(12.12345, digits = 3)
[1] 12.1
> signif(12345.12345, digits = 3)
[1] 12300

Ответ 8

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

Ответ 9

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

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

Ответ 10

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

Ответ 11

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

library(tutoR)
format(1.128347132904321674821, 2)

В небольшом онлайн-справке.

Ответ 12

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

round(data, 2)

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