r - 为什么 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"
结果。如果您能给我有关此行为的见解,我将不胜感激。先感谢您!
解决方案
你在哪里使用format="d"
你是在告诉 R 你将专门格式化整数。R 可以存储的最大整数.Machine$integer.max
通常是
.Machine$integer.max
# [1] 2147483647
超过该数量的数字存储为浮点数。所以也许你想改用这个:
formatC(2152040015, format = "f", width = 10, flag = "0", digits = 0)
推荐阅读
- sql - Sequelize 不使用模型中的字段别名
- javascript - JavaScript 库 - 如何公开回调函数
- jekyll - Jekyll 自定义主题(本地运行)
- xaml - Xamarin XAML: Setting Attached Property in Code
- angular - 如何在 Angular 6 中处理 401 未经身份验证的错误
- c# - C# 表单打印尽可能大的图像
- php - Laravel 5.6 登录更改 Hash::make($data['password']) 为
- swift - SWIFT4 - 从服务器刷新数据
- postgresql - 是否可以在没有超表插入的情况下从 Timescale 转储?
- c - 具有虚拟头和尾的双向链表实现