由 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)
为真当且仅当 tm
是一个列表或配对列表,和
is.pairlist(tm)
为真当且仅当 tm
是一个pairlist 或NULL。> is.list(tm)
[1] TRUE
> is.pairlist(tm)
[1] FALSE
因此
tm
必须是一个列表。但是“列表”不是“POSIXlt”的父类(super class):
> 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
一个列表与否?
最佳答案
这是一个带有 c("POSIXct", "POSIXt")
的命名列表类和 tzone
属性:
POSIXlt = Named list + class + tzone attribute
事实上,我们可以从一个命名列表
L
建立或制造这样一个对象。通过添加 class
和 tzone
属性是这样的:L <- list(sec = 12, min = 28L, hour = 5L, mday = 24L, mon = 11L,
year = 115L, wday = 4L, yday = 357L, isdst = 0L)
tm0 <- L # start with list L
class(tm0) <- c("POSIXlt", "POSIXt") # add class
attr(tm0, "tzone") <- "UTC" # add tzone
tm <- strptime( "24-12-2015 05:28:12", format="%d-%m-%Y %H:%M:%S", tz="UTC" )
identical(tm0, tm)
## [1] TRUE
我们可以恢复命名列表
L
来自 tm
通过删除 class
和 tzone
属性:tm <- strptime( "24-12-2015 05:28:12", format="%d-%m-%Y %H:%M:%S", tz="UTC" ) # start w tm
L0 <- unclass(tm) # remove class
attr(L0, "tzone") <- NULL # remove tzone
identical(L0, L)
## [1] TRUE
关于r - 类 "POSIXlt"的 R 对象是否为 "list"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34454916/