大多数情况下,它没有什么区别-但有时您可以使用它来获得您的代码到 跑快点和使用 更少的记忆。Double (“ numeric”)向量每个元素使用8个字节。整数向量每个元素只使用4个字节。对于大型向量,这样就减少了内存浪费,也减少了对 CPU 的占用(所以通常速度更快)。
大多数情况下,这适用于处理索引时。
这里有一个例子,把1加到一个整数向量中就变成了一个双向量:
x <- 1:100
typeof(x) # integer
y <- x+1
typeof(y) # double, twice the memory size
object.size(y) # 840 bytes (on win64)
z <- x+1L
typeof(z) # still integer
object.size(z) # 440 bytes (on win64)
... 但也要注意,过度使用整数可能是危险的:
1e9L * 2L # Works fine; fast lean and mean!
1e9L * 4L # Ooops, overflow!
正如@Gavin 指出的,整数的范围大约是 -2e9到2e9。
但需要注意的是,这适用于当前的 R 版本(2.13)。R 可能在某个时候改变这一点(64位整数将是甜的,这可以启用长度 > 2e9的向量)。为了安全起见,每当需要最大整数值时,都应该使用 .Machine$integer.max(并为最小值取消该值)。