首页 > 解决方案 > 为什么 formatC() 函数通过强制对某些特定值引入 NA?

问题描述

我正在尝试格式化数字,以便它们具有固定宽度,需要引入前导零。在this answer to a related question之后,我正在使用该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"结果。如果您能给我有关此行为的见解,我将不胜感激。先感谢您!

标签: rnumber-formatting

解决方案


你在哪里使用format="d"你是在告诉 R 你将专门格式化整数。R 可以存储的最大整数.Machine$integer.max通常是

.Machine$integer.max
# [1] 2147483647

超过该数量的数字存储为浮点数。所以也许你想改用这个:

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

推荐阅读