#r #r-raster
Вопрос:
Я пытаюсь вычислить квантили для стека растров в R с помощью raster::quantile
. Это прекрасно работает для одного растра, но применение функции к стеку растров, где растры не имеют одинаковых ячеек NA, приводит к неправильным значениям квантиля.
Вот воспроизводимый пример проблемы:
library(raster) #gt; Loading required package: sp #create raster stack r lt;-raster(system.file("external/test.grd", package="raster")) r1 lt;- setValues(r, sample(100:2000, ncell(r), replace = TRUE)) s lt;- stack(r, r1) plot(s)
#quantiles of raster stack quantile(s) #gt; 0% 25% 50% 75% 100% #gt; test.1 138.7071 293.9575 371.9001 501.0102 1736.058 #gt; test.2 100.0000 596.0000 1062.0000 1530.0000 2000.000 #quantiles of each raster in the stack quantile(s[[1]]) #gt; 0% 25% 50% 75% 100% #gt; 138.7071 293.9575 371.9001 501.0102 1736.0580 quantile(s[[2]]) #gt; 0% 25% 50% 75% 100% #gt; 100 591 1071 1530 2000
Как вы можете видеть, квантили 25% и 50%, рассчитанные с использованием стека растров, отличаются для второго растра в стеке по сравнению с использованием quantile
функции непосредственно на этом растре. Обратите внимание, что эта проблема не возникает, если оба растра имеют одинаковые значения NA, например
quantile(stack(r1, sqrt(r1))) #gt; 0% 25% 50% 75% 100% #gt; test 100 585.00000 1045.50000 1537.00000 2000.00000 #gt; layer 10 24.18677 32.33419 39.20459 44.72136 quantile(r1) #gt; 0% 25% 50% 75% 100% #gt; 100.0 585.0 1045.5 1537.0 2000.0 quantile(sqrt(r1)) #gt; 0% 25% 50% 75% 100% #gt; 10.00000 24.18677 32.33419 39.20459 44.72136
Ответ №1:
В используемой версии CRAN, если ячейка имеет значение NA в одном слое, для нее устанавливается значение NA во всех слоях. Я согласен, что этого не ожидается, и я исправил это в версии 3.5-4 (в настоящее время версия для разработки).
quantile(s) # 0% 25% 50% 75% 100% #test.1 138.7071 293.9575 371.9001 501.0102 1736.058 #test.2 100.0000 601.0000 1061.5000 1542.0000 2000.000
Комментарии:
1. Большое спасибо, Роберт, я ценю, что ты решил исправить ситуацию.