【发布时间】:2015-09-15 06:22:53
【问题描述】:
我注意到如果我有一个大于 10 位的数字,as.integer 函数将返回 NA。
例如:
as.integer(10000000000)
将给出 NA。
为什么会这样?我想这可能与整数的存储有关?我该如何解决这个问题?
谢谢。
【问题讨论】:
-
32 位整数,所以 2^31-1
我注意到如果我有一个大于 10 位的数字,as.integer 函数将返回 NA。
例如:
as.integer(10000000000)
将给出 NA。
为什么会这样?我想这可能与整数的存储有关?我该如何解决这个问题?
谢谢。
【问题讨论】:
您可以通过以下方式找到整数的限制:
> .Machine$integer.max
[1] 2147483647
任何更大的值都将被解释为 NA
> as.integer(.Machine$integer.max)
[1] 2147483647
> as.integer(.Machine$integer.max+1)
[1] NA
Warning message:
NAs introduced by coercion to integer range
如果您需要处理更大的值,请使用 as.numeric(数字可以处理比整数更大的值)或 gmp(多精度算术包)之类的包。
【讨论】:
gmp::as.bigz(.Machine$integer.max+1) 给2147483648