Форматирование десятичных знаков в 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)
Затем данные будут округлены до двух знаков после запятой.