为什么
identical(c(1:3), c(1, 2, 3))
是false?换句话说,前者为什么是整数而后者是浮点数?R> class(1:3)
[1] "integer"
R> class(c(1,2,3))
[1] "numeric"
R>
简而言之,:
作为序列操作符会返回整数,因为“这才是人们真正想要的”。
因此:
R> identical(1:3, c(1L,2L,3L))
[1] TRUE
R> identical(1*(1:3), c(1,2,3))
[1] TRUE
R>
这涉及到冒号运算符。来自?':'
或help(':')
:
二元运算符
:
有两个含义:对于因子a:b
相当于interaction(a, b)
(但级别的排序和标记方式不同)。对于其他参数,
from:to
相当于seq(from, to)
,并在步长为1或-1的情况下生成从 from 到 to 的序列。如果值 to 与 from 相差整数,且相差小于大约 1e-7 的数字模糊,则包括值 to。非数字参数在内部被强制转换为数字(因此没有调度方法)-复杂的值将带有警告而将其虚部舍弃。
对于数字参数,它是一个数字向量。如果 from 是整数值并且结果可以用 R 整数类型表示,则该向量将是整数类型;否则为 "double" 类型(也称为 "numeric" 模式)。
seq()
的帮助中可以得知: "seq.int 和 seq 的默认方法对于数值参数返回一个类型为“integer”或“double”的向量:程序员不应该依赖于哪种类型。"换句话说,这是一个任意的选择。您可以通过在整数后附加“L”来明确定义整数:identical(1:3, c(1L, 2L, 3L))
- Calbers