R:为什么"相同(c(1:3),c(1,2,3))"是假的?

Joe*_*Joe 6 double integer r

为什么是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)


Fer*_*ndo 5

它与冒号操作符有关.来自?':'help(':'):

细节

二元运算符:有两个含义:对于因子a:b等价于交互(a,b)(但是对这些级别进行排序和标记不同).

对于来自的其他参数:to等于seq(from,to),并以1或-1为步长生成从from到to的序列.如果值与整数相差大约1e-7的数字模糊,则将包括值.内部强制非数字参数(因此没有调度方法)到数值复数值将丢弃带有警告的虚部.

对于数字参数,一个数字向量.如果from是整数值且结果可以在R整数类型中表示,则其类型为整数,否则为"double"类型(也称为"numeric"模式).