1

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

例如(我的列表称为states,它由 GMT 索引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")

建议赞赏!

4

1 回答 1

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 < raw <logical < integer < real < complex < character < list < 表达式,按照优先顺序。

于 2011-09-26T16:46:57.260 回答