创建R循环以从目录中读取shapefile并对其进行区域统计

问题描述 投票:0回答:1

我在“县”目录中有120个县shapefile。我想使用R读取每个shapefile,并使用单个栅格图层“ NOAA_normal_crop”对每个shapefile执行区域统计(均值)。

我能够创建一个脚本,以列表形式读取所有shapefile:

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)

但是我仍然需要创建一个循环,遍历每个单独的shapefile并执行区域统计。下面的循环是我尝试过的,但它仅给我一个值,而我想要每个多边形的平均值。

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

感谢您提供任何建议。

我在“县”目录中有120个县shapefile。我想使用R读取每个shapefile,并使用单个栅格图层“ NOAA_normal_crop ....

r for-loop gis lapply
1个回答
0
投票

我相信您的循环是正确的。但是,它不是列表或数组,因此每次迭代都会覆盖该值。你应该试试: ex = vector() for (i in 1:length(allShapes)){ ex[i] <- extract(NOAA_normal_crop, allShapes[[i]], fun=mean, na.rm=TRUE, df=TRUE) }

© www.soinside.com 2019 - 2024. All rights reserved.