У меня есть номер, например 1.128347132904321674821, который я хотел бы показать как только два десятичных знака при выводе на экран (или записанный в файл). Как это сделать?
x <- 1.128347132904321674821
ИЗМЕНИТЬ:
Использование:
options(digits=2)
Был предложен как возможный ответ. Есть ли способ указать это в script для одноразового использования? Когда я добавляю его в свой script, он, похоже, не делает ничего другого, и меня не интересует много повторного ввода для форматирования каждого номера (я автоматизирую очень большой отчет).
-
Ответ: round (x, digits = 2)
Фон: Некоторые ответы, предлагаемые на этой странице (например, 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"
0.0001
как 0.00
format()
и prettyNum()
преобразуют цифры в символы. Как бы вы решили это?
Вы можете отформатировать число, скажем x
, до десятичных знаков, как вы пожелаете. Здесь x
- число со многими десятичными знаками. Предположим, что мы хотим показать до 8 десятичных знаков этого числа:
x = 1111111234.6547389758965789345
y = formatC(x, digits = 8, format = "f")
# [1] "1111111234.65473890"
Здесь format="f"
дает плавающие числа в обычных десятичных разрядах, скажем, xxx.xxx и digits
указывает количество цифр. В отличие от этого, если вы хотите получить целое число для отображения, вы должны использовать format="d"
(очень похоже на sprintf
).
formatC
- это почти исключительно то, что я использую для этой цели. Я думаю, что этот ответ хороший и находится в базе R согласно запросу ОП.
Вы можете попробовать мой пакет 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
для двух знаков после запятой, предполагая, что вы хотите сохранить конечные нули
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')
sprintf
, это в основном рамки для форматирования
Ну, два, которые приходят на ум,
fixed(1.128347132904321674821, digits=2)
или если вы предпочитаете сильные цифры для фиксированных цифр, то
signif(1.128347132904321674821,digits=3)
Error: could not find function "fixed"
Что-то вроде этого:
options(digits=2)
Определение опций цифр:
digits: controls the number of digits to print when printing numeric values.
Функция formatC()
может использоваться для форматирования числа до двух знаков после запятой. Две десятичные точки задаются этой функцией, даже если результирующие значения включают в себя завершающие нули.
Я использую этот вариант для силовой печати K десятичных знаков:
# format numeric value to K decimal places
formatDecimal <- function(x, k) format(round(x, k), trim=T, nsmall=k)
Обратите внимание, что числовые объекты в R сохраняются с двойной точностью, которая дает вам (примерно) 16 десятичных цифр точности - остальное будет быть шумом. Я утверждаю, что число, показанное выше, возможно, просто для примера, но оно равно 22 цифрам.
Мне кажется, что это будет что-то вроде
library(tutoR)
format(1.128347132904321674821, 2)
В небольшом онлайн-справке.
если вы просто хотите округлить число или список, просто используйте
round(data, 2)
Затем данные будут округлены до двух знаков после запятой.