Как передать несколько функций в растре :: extract () - PullRequest
0 голосов
/ 12 декабря 2018

Я работаю с растровым CHM и должен извлечь несколько метрик из шейп-файла многоугольника.Сейчас я делаю что-то вроде этого:

library(raster)
library(sp)

#from the help page of extract
r <- raster(ncol=36, nrow=18, vals=1:(18*36))
cds1 <- rbind(c(-180,-20), c(-160,5), c(-60, 0), c(-160,-60), c(-180,-20))
cds2 <- rbind(c(80,0), c(100,60), c(120,0), c(120,-55), c(80,0))
polys <- spPolygons(cds1, cds2)

#metrics extraction
mean <- extract(r, polys,mean,df=T)
min<-extract(r, polys,min,df=T)
max<-extract(r, polys,max,df=T)
#and so on for other summary functions (like sd, mode, median, sum etc...)

Я бы знал, есть ли способ передать всю функцию суммирования в аргумент fun = функции extract () и возможно ли это сделатьпараллельно всегда используя одни и те же данные (в примере r и polys).Спасибо за помощь

1 Ответ

0 голосов
/ 12 декабря 2018

Как подсказывает @dww выше в комментариях, здесь есть функция, которая вычисляет количество сводных статистических данных и возвращает их в виде вектора.Он передается аргументу fun raster::extract.Обратите внимание, что документация от raster::extract говорит, что функция должна принимать аргумент na.rm.Мне не удалось изменить поведение по умолчанию extract для именования столбцов выходных данных фрейма данных, поэтому я вручную задал имена позже.

Код

my_summary <- function(x, na.rm) c(mean = mean(x, na.rm=na.rm), min = min(x, na.rm=na.rm), max = max(x, na.rm=na.rm))
r_summary <- extract(r, polys, fun = my_summary, df = TRUE)
names(r_summary) <- c('ID', 'mean', 'min', 'max')

Вывод

  ID     mean min max
1  1 387.8158 326 507
2  2 321.0800 172 498
...