一个对象如何在 R 中有两个不同的 类?

How can an object have two different classes in R?

classnumeric包括sub-classes integerdouble。有趣的是,变量的 class 取决于它的初始化方式。例如:

x <- c(0,0,0,0,0,1,1,1,1,1)
y <- rep(0:1, c(5,5))

x
# [1] 0 0 0 0 0 1 1 1 1 1
y
# [1] 0 0 0 0 0 1 1 1 1 1

class(x)
# [1] "numeric"
class(y)
# [1] "integer"

identical(x,y)
# [1] FALSE

我的问题:为什么 R 不将示例中的 x 强制转换为 class 整数?我认为这样做更有意义,因为 x 是一个 integer 和一个 numeric 向量,但是 numeric 向量不一定是整数向量。因此,将 x 强制为整数 class 可能更直观,至少对我而言。我错过了什么吗?

当您键入 0 时,R 会将其理解为数字(双精度)。整数必须键入 0L。当然,: 被记录为 return 整数值 "if from is integer-valued and the result is representable in the R integer type"。