修改 R 中的循环以在计算值旁边添加文件名

Modify a loop in R to add file name next to computed value

这是上一个问题的延续:

原问题由各位好心人回答,现在我有另一个。

所以,我在目录 "Counties" 中有 120 个县 shapefile。我正在使用 R 读取每个 shapefile,并且对于每个 shapefile,使用单个栅格图层 "RGB_band1_NOAA."

执行区域统计(平均)

这是执行循环的代码:

library(rgdal)
library(raster)
library(sf)
library(maptools)

input_path <- "C:/path/to/Counties"
files <- list.files(input_path, pattern="[.]shp$", full.names=TRUE)
allShapes <- lapply(files, readOGR)

observations = vector()
for (i in 1:length(allShapes)){
  observations[i] <- extract(RGB_band1_NOAA, allShapes[[i]], fun=mean, na.rm=TRUE)
}

> observations
[1] 0.0420572431 0.0000000000 0.0000000000 0.0000000000 0.0067861584 0.0004686914 0.0700653942 
 0.0000000000 0.0000000000 0.0542978996 0.0000000000
[12] 0.0000000000 0.0071916012 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0323350977
[23] 0.0015185602 0.0000000000 0.0000000000 0.1012598426 0.0000000000 0.0000000000 0.0069525885....

这会将所有结果放入列表中。有没有办法编辑我的执行区域统计的循环,这样,对于每个计算值,R 还会在它旁边添加 shapefile 名称?在文件夹中,每个 shapefile 都是县名(例如 - Adair.shp、Boyd.shp)。这样我就可以确保在我稍后进行时(计划是转换为值旁边带有县名的数据框),每个计算值都匹配与其关联的县?

names(observations)<-files

这应该可以解决问题。

或者您可能只想使用没有完整路径的文件名:

names(observations)<-list.files(input_path, pattern="[.]shp$")

这将为您提供一个命名向量。如果你想把它变成一个有两列的 data.frame ,你可以使用这样的东西:

observations<-data.frame(observations,filename=list.files(input_path, pattern="[.]shp$"),stringsAsFactors=FALSE)

最后,如果出于某种原因你坚持在循环内部执行此操作,你可以这样做:

for (i in 1:length(allShapes)){
  observations[i] <- extract(RGB_band1_NOAA, allShapes[[i]], fun=mean, na.rm=TRUE)
  names(observations)[i]<-files[i]
}