as.list() 在 POSIXlt 原子向量上不可能吗?
Is as.list() not possible on POSIXlt atomic vectors?
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 分类的原子向量不起作用是故意的吗?如果是,为什么?
没有 as.list.POSIXlt
方法,所以使用 as.list.default
,它执行以下操作:
if (typeof(x) == "list") x else .Internal(as.vector(x, "list"))
因为你的x
的typeof
是list
,上面的表达式returns是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代替。
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 分类的原子向量不起作用是故意的吗?如果是,为什么?
没有 as.list.POSIXlt
方法,所以使用 as.list.default
,它执行以下操作:
if (typeof(x) == "list") x else .Internal(as.vector(x, "list"))
因为你的x
的typeof
是list
,上面的表达式returns是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代替。