任何人都可以向我解释这个(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"
答案 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"