Почему функция format C () вводит NA путем принуждения к некоторым указанным c значениям? - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь отформатировать числа таким образом, чтобы они имели фиксированную ширину, и были нужны начальные нули. После этого этого ответа на связанный вопрос я использую функцию formatC для достижения этой цели. Но я получаю неожиданные результаты.

Например, этот код работает должным образом:

formatC(2102040015, format = "d", width = 10, flag = "0")
## [1] "2102040015"
formatC(102040015, format = "d", width = 10, flag = "0")
## [1] "0102040015"

Но когда я пытаюсь использовать тот же самый подход с этими числами, я получаю странный результат:

formatC(2152040015, format = "d", width = 10, flag = "0")
## Warning message:
## In storage.mode(x) <- "integer" :
##  NAs introduced by coercion to integer range
## [1] "        NA"
formatC(2522040015, format = "d", width = 10, flag = "0")
## Warning message:
## In storage.mode(x) <- "integer" :
##  NAs introduced by coercion to integer range
## [1] "        NA"

После некоторого тестирования я пришел к выводу, что для каждого числа, большего чем 2150000000, я получаю это сообщение и результат " NA". Я был бы признателен, если бы вы дали мне понимание этого поведения. Заранее спасибо!

1 Ответ

2 голосов
/ 28 февраля 2020

Где вы используете format="d", вы говорите R, что будете конкретно форматировать целые числа. Самое большое целое число R, которое можно сохранить, равно .Machine$integer.max, которое обычно равно

.Machine$integer.max
# [1] 2147483647

. Числа, превышающие эту сумму, сохраняются как числа с плавающей запятой. Так что, возможно, вы хотели бы использовать это вместо:

formatC(2152040015, format = "f", width = 10, flag = "0", digits = 0)
...