두 개의 RasterStack 객체로 작업하고 있습니다. 각 객체는 단일 시간 단계를 나타내는 10 개의 레이어로 구성되어 있습니다.RasterStack 객체의 단일 셀을 통한 속도 최적화 루프
# Mock data
pred.rst.stck <- do.call("stack", lapply(seq(10), function(i) {
pred.rst <- raster(nrows = 15, ncols = 15, xmn= 0, xmx = 10, ymn = 0, ymx = 10)
pred.rst[] <- rnorm(225, 50, 10)
return(pred.rst)
})
resp.rst.stck <- do.call("stack", lapply(seq(10), function(i) {
resp.rst <- raster(nrows = 10, ncols = 10, xmn = 0, xmx = 10, ymn = 0, ymx = 10)
resp.rst[] <- rnorm(100, 50, 10)
return(resp.rst)
})
pred.rst.stck
응답 변수 세트와 예측 변수의 집합 resp.rst.stck
로서 기능한다. 예측기 RasterStack의 각 단일 셀에 대해, 응답 RasterStack의 각 셀에 선형 모델을 맞추고, 맞는 모델 당 해당 R- 제곱을 추출하여이를 합산하고 싶습니다. 전체 과정을 가속화하는 우아한 방법이 있는지
# Parallelization
library(parallel)
n.cores <- detectCores()
clstr <- makePSOCKcluster(n.cores)
# Extract cell values from RasterStack objects
pred.vals <- getValues(pred)
resp.vals <- getValues(resp)
clusterExport(clstr, c("pred.vals", "resp.vals"))
# Loop through all predictor cells
rsq.sums <- parLapply(clstr, seq(nrow(pred.vals)), function(i) {
# For each predictor cell, loop through all response cells,
# fit linear model, extract and sum up single R-squared
do.call("sum", lapply(seq(nrow(resp.vals)), function(j) {
summary(lm(resp.vals[j, ] ~ pred.vals[i, ]))$r.squared
}))
})
parLapply
비록 수행 훨씬 더 일반 lapply
에 비해, 내가 궁금 : 짧게 이야기하면, 여기에 지금까지 R의 parallel
패키지를 사용하여 내 가장 빠른 방법입니다. 어떤 제안?
건배,
플로리안
믿을 수없는, 대단히 감사합니다! – fdetsch
@flowla 당신을 환영합니다! :-) –