我经常看到符号1L(或2L,3L等)出现在 R 代码中。1L和有什么区别1? 1==1L评估为TRUE。为什么1L在 R 代码中使用?
1L
2L
3L
1
1==1L
TRUE
所以,@James 和@Brian 解释 了 3L 的含义。但你 为什么 要使用它?
大多数时候它没有任何区别——但有时您可以使用它来使您的代码 运行得更快 并消耗 更少的内存 。双精度(“数字”)向量每个元素使用 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在需要最大整数值时使用(并将其取反为最小值)。
.Machine$integer.max