【问题标题】:Compute range over list of `xts` objects计算“xts”对象列表的范围
【发布时间】:2011-11-25 08:52:11
【问题描述】:

R 中,我有一个xts 对象列表,我想计算列表中所有项目的时间索引范围。但是我找不到一种流畅的方法,它会不断丢失对象的类并变成原始数字向量。

例如(我的列表名为states,它的索引是格林威治标准时间POSIXct):

> c(min(sapply(states, start)), max(sapply(states, end)))
[1] 1252714110 1315785360

> range(sapply(states, function(x) range(index(x))))
[1] 1252714110 1315785360

将这些转换回POSIXct 很麻烦,我是这样做的:

minmax <- range(sapply(states, function(x) range(index(x))))
epoch <-   as.POSIXct(0, origin="1970-01-01", tz="GMT")
rg <- as.POSIXct(minmax, origin="1970-01-01", tz="GMT")

建议!

【问题讨论】:

    标签: r date xts


    【解决方案1】:

    使用lapply 查找每个列表元素的索引范围。然后使用do.call查找列表的范围:

    do.call(range, lapply(states, function(x) range(index(x))))
    

    或者,如果您更喜欢函数式范例:

    Reduce(range, Map(function(x) range(index(x)), states))
    

    sapply 不起作用,因为简化过程将输出转换为具有单一类型的原子向量或矩阵:NULL

    【讨论】:

    • 太好了,谢谢!我怀疑问题出在简化上,但想不出办法。
    猜你喜欢
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多