我经常看到符号 1L
(或 2L
、 3L
等)出现在 R 代码中。 1L
和 1
有什么区别? 1==1L
评估为 TRUE
。为什么在 R 代码中使用 1L
?
最佳答案
所以,@James 和@Brian 解释了 3L 的含义。但是 为什么 你会使用它?
大多数时候它没有区别 - 但有时您可以使用它来让您的代码运行得更快并消耗更少的内存。 double (“数字”)向量每个元素使用 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
。关于r - `1L` 和 `1` 有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7014387/