Создание цикла R для чтения шейп-файлов из каталога и выполнения зональной статистики для каждого - PullRequest
0 голосов
/ 01 октября 2019

У меня есть 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

Заранее благодарим за любые советы, которые вы можете иметь.

1 Ответ

0 голосов
/ 01 октября 2019

Я полагаю, что ваш цикл правильный. Однако это не список или массив, поэтому при каждой итерации значение перезаписывается. Вы должны попробовать: ex = vector() for (i in 1:length(allShapes)){ ex[i] <- extract(NOAA_normal_crop, allShapes[[i]], fun=mean, na.rm=TRUE, df=TRUE) }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...