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