Вычислить диапазон по списку объектов `xts` - PullRequest
1 голос
/ 26 сентября 2011

В 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")

Советы приветствуются!

1 Ответ

1 голос
/ 26 сентября 2011

Используйте lapply, чтобы найти диапазон индекса каждого элемента списка.Затем используйте do.call, чтобы найти диапазон списка:

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

или, если вы предпочитаете функциональную парадигму:

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

sapply не работает, потому что упрощениеПроцесс преобразует выходные данные в атомарный вектор или матрицу с одним типом: NULL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...