У меня есть 120 графических форм в каталоге "Графства". Я хочу использовать R для чтения в каждом шейп-файле и для каждого шейп-файла выполнять зональную статистику (среднее), используя один растровый слой "NOAA_normal_crop."
Мне удалось создать скрипт, который будет читать во всехШейп-файлы в виде списка:
library(rgdal)
library(raster)
library(sf)
library(maptools)
NOAA_normal <- raster("C:/path/to/raster/noaa_normal.tif")
input_path <- "C:/path/to/Counties"
files <- list.files(dir, pattern="[.]shp$", full.names=TRUE)
allShapes <- lapply(files, readOGR)
Но мне все еще нужно создать цикл, который проходит через каждый отдельный шейп-файл и выполняет зональную статистику. Ниже приведен цикл, который я пробовал, но он возвращает мне только одно значение, в то время как я хочу получить среднее значение для каждого многоугольника.
for (i in 1:length(allShapes)){
ex <- extract(NOAA_normal_crop, allShapes[[i]], fun=mean, na.rm=TRUE, df=TRUE)
}
РЕДАКТИРОВАТЬ: я также попытался снова использовать lapply, но это не таклибо не работает.
lapply(allShapes, extract(NOAA_normal_crop, allShapes, fun=mean, na.rm=TRUE, df=TRUE))
# Error in round(y) : non-numeric argument to mathematical function
Заранее благодарим за любые советы, которые вы можете иметь.