Я знаю, что это старый вопрос, но я сталкивался с этим много раз, пытаясь решить подобную проблему. Хотя фокальная функция в растровом пакете очень проста и удобна, я обнаружил, что она работает очень медленно при работе с большими растрами. Есть много способов решить эту проблему, но я нашел один способ - использовать системные команды для «инструментов белого ящика», представляющих собой набор инструментов для растрового анализа, управляемый из командной строки. Его главное преимущество заключается в том, что он выполняет инструменты параллельно и действительно использует преимущества многоядерных процессоров. Я знаю, что R имеет много кластерных функций и пакетов (которые я использую для прогнозирования растров в модели случайного леса), но я боролся с большей частью реализации параллельных вычислений в R. У инструментов Whitebox есть дискретные функции для среднего, максимального, большинства, медианы и т. Д. .. фильтры (не говоря уже о множестве инструментов для обработки рельефа, которые отлично подходят для анализа ЦМР).
Некоторые примеры кода для того, как я внедрил модальный или мажоритарный фильтр (окно 3x3) в R большого классифицированного растра растительного покрова (nrow = 3793, ncol = 6789, ncell = 25750677) с использованием инструментов whitebox:
system('C:/WBT2/target/release/whitebox_tools --wd="D:/Temp" ^
--run=MajorityFilter -v --input="input_rast.tif" ^
--output="maj_filt_rast.tif" --filterx=3 --filtery=3',
wait = T, timeout=0, show.output.on.console = T)
Вышеприведенному коду потребовалось менее 3,5 секунд для выполнения, в то время как эквивалентная функция «focal» растрового пакета с использованием «modal», также из растрового пакета, заняла 5 минут, чтобы завершить кодирование ниже как:
maj_filt_rast<- focal(input_rast, fun=modal, w=matrix(1,nrow=3,ncol=3))
Сборка и установка инструментов whitebox немного раздражает, но есть хорошие инструкции. На мой взгляд, это того стоит, поскольку растровые процессы, которые ранее были чрезмерно медленными в R, выполняются на удивление быстро, и это позволяет мне сохранять кодирование всего внутри R с помощью системных команд.