Answers:
因此,@ 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
在需要最大整数值(并取反最小值)时使用。
object.size
。有用的是传递到可能需要特定类型数据的Fortran或C代码。
object.size(1:100)
与object.size(1:100+0)
400字节+一些开销与800字节+一些开销进行比较。我更新了上面的示例。
c(1L, 2L, 3L, 4L,...100L)
VS as.integer(c(1, 2, 3, 4,...100))
。
要为常量显式创建一个整数值,您可以将函数调用为.integer或更简单地使用“ L”后缀。
1 == 1L
给出TRUE
,但是identical(1, 1L)
给出FALSE
。