2011-09-26 28 views
1

R中,我列出了xts对象,我想计算列表中所有项目的时间索引范围。虽然我找不到一个顺利的方法,但它仍然使对象&的类变为原始数值向量。在`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") 

建议感激!

回答

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 <表达式,按照该优先顺序。

+0

非常好,谢谢!我怀疑问题是简化,但想不出一个办法。 –