我经常看到的符号1L
(或2L
,3L
等)出现中的R代码.什么区别1L
和1
? 1==1L
评估为TRUE
.为什么1L
在R代码中使用?
Tom*_*mmy 122
所以,@ 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)
Run Code Online (Sandbox Code Playgroud)
...但是请注意,过度使用整数可能很危险:
1e9L * 2L # Works fine; fast lean and mean!
1e9L * 4L # Ooops, overflow!
Run Code Online (Sandbox Code Playgroud)
......正如@Gavin指出的那样,整数的范围大致为-2e9到2e9.
但需要注意的是,这适用于当前的R版本(2.13).R可能会在某些时候改变它(64位整数会很甜,这可能会使长度> 2e9的向量).为了安全起见,您应该.Machine$integer.max
在需要最大整数值时使用(并在最小值时将其否定).
Jam*_*mes 44
L指定整数类型,而不是标准数字类的double.
> str(1)
num 1
> str(1L)
int 1
Run Code Online (Sandbox Code Playgroud)