`1L`和`1`有什么区别?
我经常看到符号1L
(或2L
, 3L
等)出现在R代码中。 1L
和1
什么区别? 1==1L
计算结果为TRUE
。 为什么在R代码中使用1L
?
所以,@詹姆斯和@布莱恩解释了 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
(并且为最小值取反)。
从R语言的常量部分定义:
我们可以使用'L'后缀来限定任何数字,目的是使其成为一个明确的整数。 所以'0x10L'从十六进制表示中创建整数值16。 常数1e3L给出1000作为整数而不是数值,相当于1000L。 (请注意,'L'被视为限定术语1e3而不是3)。如果我们使用不是整数值的'L'(例如1e-3L)限定值,则会发出警告,并且数值为创建。 如果数字中有不必要的小数点,例如1.L,也会产生警告。
L指定一个整数类型,而不是标准数字类的double。
> str(1)
num 1
> str(1L)
int 1
链接地址: http://www.djcxy.com/p/73887.html