2011-09-26 8 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을 사용하면 각 목록 요소의 색인 범위를 찾을 수 있습니다. 단순화 과정은 원자 벡터에 출력을 변환하기 때문에

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

sapply이 작동하지 않습니다 당신이 기능 패러다임을 선호하는 경우,

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

나 : 그런 다음 목록의 범위를 찾기 위해 do.call를 사용 또는 다음 중 하나의 유형을 가진 행렬 : NULL < 로우 < 논리적 < 정수 < 리얼 < 콤플렉스 < 문자 <리스트 < 표현식.

+0

우수 감사합니다. 나는 그 문제가 단순화라고 생각했으나 과거의 방법을 생각할 수 없었다. –