真正的问题在于你无法将0到10^12的序列存储在内存中。只需将0和10^12定义为均匀分布的边界,你就可以得到你要找的内容:
runif(10000, 0, 10^12)
[1] 136086417828 280099797063 747063538991 250189170474 589044594904
[6] 65385828028 361086657969 186271687970 338900779840 649082854623 ........
这将从均匀分布中进行抽样(带替换,虽然我不认为这很重要)。
不过,你看不到的是这些实际上是浮点数。
你可以使用 ceiling
将它们四舍五入:
samp = runif(1, 0, 10^12)
samp
[1] 19199806033
samp == 19199806033
[1] FALSE
ceiling(samp) == 19199806033
[1] TRUE
因此完整的代码将是:
ceiling(runif(10000, 0, 10^12))
进一步的挑剔:
请注意,严格来说这不允许0存在(因为0.0001会被四舍五入),所以你可以从中选择。
ceiling(runif(10000, -1, 10^12))
正如Carl Witthoft提到的那样,超出整数大小范围的数字显然不会是整数,因此您不能指望这些数字是整数。但是,当与没有小数的相同浮点数进行比较时,您仍然可以指望它们评估为TRUE
。