在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")
建议赞赏!
答案 0 :(得分: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&lt;原始&lt;逻辑&lt;整数&lt;真实&lt;复杂&lt;字符&lt;列表&lt;表达式,按优先顺序排列。