Избегайте зацикливания на ячейках, поскольку оно слишком медленное.
Пример данных
library(raster)
r <- raster(ncol=300, nrow=200)
set.seed(1)
values(r) <- rnorm(n=ncell(r))
s <- stack(r, r*2, r)
Ваш подход
q25 <- raster(s)
for(i in 1:ncell(q25)){
q25[i] <- quantile(s[i], .5, na.rm=TRUE)
}
лучший подход (~ в 10 раз быстрее, см. Ниже)
q1 <- calc(s, fun=function(x) quantile(x, .5, na.rm=TRUE))
Но для медианы быстрее (~ 37x) использовать
q2 <- calc(s, fun=function(x)median(x, na.rm=TRUE))
Сравнение скорости:
system.time(for(i in 1:ncell(q25)){ q25[i] <- quantile(s[i], .5, na.rm=TRUE) })
#user system elapsed
#69.24 13.90 83.71
system.time( q1 <- calc(s, fun=function(x)quantile(x, .5, na.rm=TRUE)))
#user system elapsed
#7.81 0.00 7.81
system.time(q2 <- calc(s, fun=function(x)median(x, na.rm=TRUE)))
#user system elapsed
#2.23 0.00 2.23