为什么 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)
我正在尝试格式化数字,以便它们具有固定的宽度,需要引入前导零。按照这个 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)