当前位置:  开发笔记 > 编程语言 > 正文

类"POSIXlt"的R对象是否是"列表"?

如何解决《类"POSIXlt"的R对象是否是"列表"?》经验,为你挑选了1个好方法。

通过类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

类列表的文档说,is.list(tm)当且仅当tm列表或者是一个pairlist时,它is.pairlist(tm)是TRUE ,并且当且仅当它tm是一个pairlist或NULL 时才为TRUE .

> 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

通过这种方式的文件istm不能被视为来自"列表".特别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列表或不?



1> G. Grothendi..:

它是一个带有c("POSIXct", "POSIXt")类和tzone属性的命名列表:

POSIXlt =命名列表+ class + tzone属性

实际上,我们可以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

我们可以恢复指定的列表Ltm通过删除classtzone属性:

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

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有