向量的元素与向量没有相同的类

时间:2013-09-16 19:25:49

标签: r

任何人都可以向我解释这个(R 3.0.1)吗?为什么向量的元素与向量本身没有相同的类?不知何故,单位属性不会延伸到元素。非常感谢提前。

> x <- as.difftime( 0.5, units='mins' )
> print(class(x))
[1] "difftime"

> y <- as.difftime( c(0.5,1,2), units='mins' )
> print(class(y))
[1] "difftime"

> for (z in y) print(class(z))
[1] "numeric"
[1] "numeric"
[1] "numeric"

2 个答案:

答案 0 :(得分:2)

[.difftime功能的[版本,但[[.difftime的{​​{1}}版本<{1}}

[[

因此> `[.difftime` function (x, ..., drop = TRUE) { cl <- oldClass(x) class(x) <- NULL val <- NextMethod("[") class(val) <- cl attr(val, "units") <- attr(x, "units") val } <bytecode: 0x1053916e0> <environment: namespace:base> 函数正在使用for从y对象中提取项目,并且它正在丢失其属性。这样可以让你得到你期望看到的内容:

[[

答案 1 :(得分:0)

对象的class不必与该对象的元素的存储模式相同。在class的帮助页面中:

  

许多R对象都有一个class属性,一个字符向量给出了对象继承的类的名称。如果对象没有类属性,则它具有隐式类“矩阵”,“数组”或模式(x)的结果(除了整数向量具有隐式类“整数”)。

所以,如果你这样做:

y <- as.difftime( c(0.5,1,2), units='mins' )

# 'typeof' determines the (R internal) type or storage mode of any object
typeof( y )
# [1] "double"

# And mode: Modes have the same set of names as types (see typeof) except that
# types "integer" and "double" are returned as "numeric".
mode( y )
# [1] "numeric"

class是一个编程结构,它允许你做这样的事情:

# Integer vector
x <- 1:5
#  Set the class with 'class<-'
class(x) <- "foo"

#  Which is correctly returned by 'class'
class(x)
# [1] "foo"

#  But our elements are still integers...
typeof(x)
[1] "integer"