小编典典

`1L` 和 `1` 有什么区别?

all

我经常看到符号1L(或2L,3L等)出现在 R 代码中。1L和有什么区别11==1L评估为TRUE。为什么1L在 R
代码中使用?


阅读 373

收藏
2022-07-31

共1个答案

小编典典

所以,@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在需要最大整数值时使用(并将其取反为最小值)。

2022-07-31