修改 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]
}
这是上一个问题的延续:
原问题由各位好心人回答,现在我有另一个。
所以,我在目录 "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]
}