100

当我取消列出日期列表时,它会将它们转换回数字。这正常吗?除了重新申请 as.Date 之外的任何解决方法?

> dd <- as.Date(c("2013-01-01", "2013-02-01", "2013-03-01"))
> class(dd)
[1] "Date"
> unlist(dd)
[1] "2013-01-01" "2013-02-01" "2013-03-01"
> list(dd)
[[1]]
[1] "2013-01-01" "2013-02-01" "2013-03-01"

> unlist(list(dd))
[1] 15706 15737 15765

这是一个错误吗?

4

2 回答 2

111

do.call是使用列表“做某事”的便捷功能。在我们的例子中,使用c. cbind将列表中的 data.frames或rbinddata.frames 转换为单个大 data.frame的情况并不少见。

我们在这里所做的实际上是连接dd列表的元素。这将类似于c(dd[[1]], dd[[2]]). 请注意,c可以作为函数或字符提供。

> dd <- list(dd, dd)
> (d <- do.call("c", dd))
[1] "2013-01-01" "2013-02-01" "2013-03-01" "2013-01-01" "2013-02-01" "2013-03-01"
> class(d) # proof that class is still Date
[1] "Date"
于 2013-03-27T13:19:13.357 回答
13

或者使用purrr将日期列表展平为保留类型的向量:

list(as.Date(c("2013-01-01", "2013-02-01", "2013-03-01"))) %>% purrr::reduce(c)

结果是

[1] "2013-01-01" "2013-02-01" "2013-03-01"
于 2020-10-29T16:19:58.203 回答