为什么是identical(c(1:3), c(1, 2, 3))假的?换句话说,为什么前者是整数而后者是双?
Dir*_*tel 16
R> class(1:3)
[1] "integer"
R> class(c(1,2,3))
[1] "numeric"
R>
Run Code Online (Sandbox Code Playgroud)
简而言之,:序列运算符返回整数"因为这是人们真正想要的".
因此:
R> identical(1:3, c(1L,2L,3L))
[1] TRUE
R> identical(1*(1:3), c(1,2,3))
[1] TRUE
R>
Run Code Online (Sandbox Code Playgroud)
它与冒号操作符有关.来自?':'或help(':'):
二元运算符:有两个含义:对于因子a:b等价于交互(a,b)(但是对这些级别进行排序和标记不同).
对于来自的其他参数:to等于seq(from,to),并以1或-1为步长生成从from到to的序列.如果值与整数相差大约1e-7的数字模糊,则将包括值.内部强制非数字参数(因此没有调度方法)到数值复数值将丢弃带有警告的虚部.
对于数字参数,一个数字向量.如果from是整数值且结果可以在R整数类型中表示,则其类型为整数,否则为"double"类型(也称为"numeric"模式).