0

as.list()不适用于 POSIXlt 分类的原子向量。

x <- as.POSIXlt(Sys.time() - 0:2)
as.list(x)
# [1] "2018-05-19 12:06:38 PDT" "2018-05-19 12:06:37 PDT" 
# [3] "2018-05-19 12:06:36 PDT"

那么如何轻松地将向量x变成列表呢?到目前为止,我发现的唯一方法是使用split().

unname(split(x, x))
# [[1]]
# [1] "2018-05-19 12:06:36 PDT"
#
# [[2]]
# [1] "2018-05-19 12:06:37 PDT"
#
# [[3]]
# [1] "2018-05-19 12:06:38 PDT"

as.list()在这个向量上不起作用似乎很奇怪。是否有意as.list()在 POSIXlt 分类的原子向量上不起作用?如果是这样,为什么?

4

1 回答 1

1

没有as.list.POSIXlt方法,所以as.list.default使用了,它执行以下操作:

if (typeof(x) == "list") x else .Internal(as.vector(x, "list"))

因为typeof你的xis list,上面的表达式返回x本身,不变。

对象似乎POSIXlt不是原子的,也不是向量——它们是列表。

unclass(x)  
is(unclass(x))    # list
as.data.frame(unclass(x))  # to illustrate the POSIXlt way of storing dates

因此,因为一个POSIXlt对象已经是一个列表,所以将其转换为列表不会导致任何变化。

对于POSIXct.

> x2 <- as.POSIXct(Sys.time() - 0:2)
> as.list(x2)
[[1]]
[1] "2018-05-19 22:25:57 EEST"

[[2]]
[1] "2018-05-19 22:25:56 EEST"

[[3]]
[1] "2018-05-19 22:25:55 EEST"

所以如果你需要这样的转换,你可以使用 POSIXct 来代替。

于 2018-05-19T19:25:24.610 回答