为什么 formatC() 函数通过强制某些特定值来引入 NA?

Why is formatC() function introducing NA by coercion on some specific values?

我正在尝试格式化数字,以便它们具有固定的宽度,需要引入前导零。按照这个 this answer to a related question I'm using the 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" 结果。如果您能给我关于此行为的见解,我将不胜感激。提前致谢!

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

.Machine$integer.max
# [1] 2147483647

超过该数量的数字将存储为浮点数。所以也许您想改用它:

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