【问题标题】:Returning a vector of class POSIXct with vapply使用 vapply 返回 POSIXct 类的向量
【发布时间】:2012-12-13 12:29:24
【问题描述】:

我有以下 POSIXct 类的日期列表(只是一个最小的工作示例):

L <- list(as.POSIXct("2012-12-12 12:12:12"), as.POSIXct("2012-12-12 12:12:12"))

我需要从中检索 POSIXct 类的向量。这排除了 lapply,并留下了 sapply 和 vapply。我将它们应用如下:

sapply(L, "[[", 1)

这会返回:

[1] 1355310732 1355310732

将此向量转换为 POSIXct 会产生错误,因为必须提供原点。我也试过 vapply:

vapply(L, "[[", as.POSIXct(Sys.time()), 1)

还可以返回数值向量:

[1] 1355310732 1355310732

同样 unlist 不会产生所需的 POSIXct 向量:

> unlist(L)
[1] 1355310732 1355310732 

简而言之,如何将 POSIXct 值列表提取到 POSIXct 向量中?

【问题讨论】:

    标签: r posixct


    【解决方案1】:

    do.call 呢?

    L <- list(as.POSIXct("2012-12-12 12:12:12"), as.POSIXct("2012-12-12 12:12:12"))
    do.call(c, L) # Execute function c on a list L of arguments.
    [1] "2012-12-12 12:12:12 CET" "2012-12-12 12:12:12 CET"
    

    【讨论】:

    • 确实,正如 c 函数手册所说:“所有参数都被强制转换为一个通用类型......”。谢谢。
    • 如果原始列表具有 tz 属性,这可能会更改时区。L &lt;- list(as.POSIXct("2012-12-12 12:12:12", tz = "UTC"), as.POSIXct("2012-12-12 12:12:12", tz = "GMT")) 如果所有 tz 值都相同,则很容易修复,例如.POSIXct(do.call(c, L), tz = "UTC"),但是如果时区不同,你怎么能保持它们呢?
    • @divibisan “c 保留属性(如class)” — 不,它完全相反,它丢弃它们(这是明确记录的)。但是POSIXct 提供了自己的c 方法来规避这个问题。因此,我回滚了您的编辑。
    • @KonradRudolph 啊,我明白了。谢谢,我真的很高兴你明白了!
    • @divibisan 另外,我为我粗暴的回滚道歉。除了错误之外,您添加的内容确实具有价值。但是,我实际上建议添加您自己的答案。
    猜你喜欢
    • 2019-12-31
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    相关资源
    最近更新 更多