2011-09-26 30 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

非常好,謝謝!我懷疑問題是簡化,但想不出一個辦法。 –