R:X 的类型是 double 但 as.numeric(X) 是 FALSE?

R: type of X is double but as.numeric(X) is FALSE?

我是 R 的新用户,我有一个 'double' 类型的对象,但是当我得到 is.numeric(X) 它 returns FALSE 时,这怎么可能?在我看来,由于 X 是一个双数列表,它也应该是数字类型。不是吗?

示例如下:

student_ages <- difftime(strptime(rep("2016-05-01 00:28:15" , 3), "%Y-%m-%d %H:%M:%S"), strptime(rep("2015-03-01 00:28:15" , 3), "%Y-%m-%d %H:%M:%S") , units="days")/365
typeof(student_ages)
[1] "double"
is.numeric(student_ages)
[1] FALSE

如果您在对象上使用 dput(这是确定 R 内部结构的最佳方法之一,尽管 str 函数在许多情况下也适用)... . 你可以看到它有 class 'difftime':

> dput(student_ages)
structure(c(1.16974885844749, 1.16974885844749, 1.16974885844749
), units = "days", class = "difftime")

在 R 中,class 决定函数调度和函数结果。 typeof 函数 return 是一条较低级别的信息。因子向量也来自 typeof return "numeric" 但来自 is.numeric() 的 FALSE。您可以使用 as.numeric:

将该值有意义地强制为 "numeric" (="double")
> as.numeric(student_ages)
[1] 1.169749 1.169749 1.169749