【发布时间】:2015-12-24 15:29:46
【问题描述】:
通过documentation of the class POSIXlt,POSIXlt 类的对象是一个命名列表。 确实:
> tm <- strptime( "24-12-2015 05:28:12", format="%d-%m-%Y %H:%M:%S", tz="UTC" )
> class(tm)
[1] "POSIXlt" "POSIXt"
> tm$sec
[1] 12
> tm$min
[1] 28
> tm$hour
[1] 5
> tm$mday
[1] 24
> tm$mon
[1] 11
> tm$year
[1] 115
> tm$wday
[1] 4
> tm$yday
[1] 357
> tm$isdat
NULL
> tm$zone
NULL
> tm$gmtoff
NULL
documentation of the class list 表示is.list(tm) 为 TRUE 当且仅当tm 是一个列表或一对列表,
并且is.pairlist(tm) 是 TRUE 当且仅当 tm 是对列表或 NULL。
> is.list(tm)
[1] TRUE
> is.pairlist(tm)
[1] FALSE
因此tm 必须是一个列表。
但是“list”不是“POSIXlt”的超类:
> is(tm)
[1] "POSIXlt" "POSIXt" "oldClass"
> extends("POSIXlt")
[1] "POSIXlt" "POSIXt" "oldClass"
extends 否定了这个问题,如果“POSIXlt”延伸到“列表”,答案甚至不是“也许”:
> extends("POSIXlt","list")
[1] FALSE
此外,
> is("POSIXlt","list")
[1] FALSE
> is(tm,"list")
[1] FALSE
documentation of is 这意味着tm 不能被视为来自“列表”。特别是tm 不是一个列表。
但是,如果tm 不能被视为来自“列表”,那么为什么as 会成功地将tm 强制转换为列表?
as(tm.list 无疑是一个列表,而 as.list(tm) 和 tm 是相同的:
> as(tm,"list")
[[1]]
[1] 12
[[2]]
[1] 28
[[3]]
[1] 5
[[4]]
[1] 24
[[5]]
[1] 11
[[6]]
[1] 115
[[7]]
[1] 4
[[8]]
[1] 357
[[9]]
[1] 0
> class(as(tm,"list"))
[1] "list"
> is.list(as(tm,"list"))
[1] TRUE
> is(as(tm,"list"),"list")
[1] TRUE
> identical(tm,as.list(tm))
[1] TRUE
as(tm,"list") 确实具有在类 POSIXlt 的文档中指定的组件,但名称已消失。
列表是什么意思? tm 是不是列表?
【问题讨论】: