遍历多个文件夹并计算同一文件夹 R 的光栅平均值
Loop through multiple folder and Calculate mean of raster of Same folder R
我想遍历 R 中父文件夹中的不同子文件夹。我确切地说我是 R 的新用户。我在 1 个父文件夹中有 10 个子文件夹。每个子文件夹包含 100 个光栅文件。
对于每个子文件夹,我想计算所有光栅文件的平均值并根据子文件夹的名称编写新光栅并添加描述 "mean"。
|--Subfol i=1 --[raster(j=1),
| raster(j), --mean 100 files -- Subfol1mean. |
| raster(j=100)]
|
parent_fold--|
|
|----Subfol i=1 --[raster(j=1),
raster(j), --mean 100 files -- Subfol10mean.
raster(j=100)]
我尝试了以下代码来启动:
setwd("XXXX/parent_fold")
#list all the files in the subfolders
sub<- list.files(full.names = F , recursive =F, pattern='tiff')
for(j in 1:length(sub)){
h<- list.files(path=sub[j], recursive = T, full.names = T, pattern='tiff')
d<-stack(h)
x<-stackApply(d, mean)
#writeRaster
}
我有一些困难要追求,我不确定我做了什么是正确的道路。谢谢你的帮助。
我收到以下错误:
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘nlayers’ for signature ‘"matrix"’
根据您的描述,您希望首先遍历 list.dirs
子文件夹,然后 list.files
遍历相应文件。现在,您的循环将 return 什么都没有,因为 sub 将是空的。考虑放置 print
语句来验证。
sub <- list.dirs(full.names=FALSE, recursive=FALSE)
for(j in 1:length(sub)) {
print(sub[j])
h <- list.files(path=sub[j], recursive=TRUE, full.names=TRUE, pattern='.tiff')
print(h)
d <- stack(h)
x <- stackApply(d, mean)
writeRaster(x, filename=paste0(sub[j], "_mean.tiff"), format="****", overwrite=TRUE)
}
请根据需要调整最后几行,因为我对使用栅格文件或 栅格 包一无所知。文件将保存在父文件夹中。
Below a solution that works well:
setwd("XXX/parent_fold")
library(raster)
sub <- list.dirs(full.names=FALSE, recursive=FALSE)
for(j in 1:length(sub)) {
print(sub[j])
h <- list.files(path=sub[j], recursive=TRUE, full.names=TRUE, pattern='.tiff')
print(h)
d <- stack(h)
mean <- stackApply(d, indices = rep(1,nlayers(d)), fun = "mean", na.rm = T)
writeRaster(mean, filename=paste0(sub[j], "_mean.tif"), overwrite=TRUE)
}
我想遍历 R 中父文件夹中的不同子文件夹。我确切地说我是 R 的新用户。我在 1 个父文件夹中有 10 个子文件夹。每个子文件夹包含 100 个光栅文件。 对于每个子文件夹,我想计算所有光栅文件的平均值并根据子文件夹的名称编写新光栅并添加描述 "mean"。
|--Subfol i=1 --[raster(j=1),
| raster(j), --mean 100 files -- Subfol1mean. |
| raster(j=100)]
|
parent_fold--|
|
|----Subfol i=1 --[raster(j=1),
raster(j), --mean 100 files -- Subfol10mean.
raster(j=100)]
我尝试了以下代码来启动:
setwd("XXXX/parent_fold")
#list all the files in the subfolders
sub<- list.files(full.names = F , recursive =F, pattern='tiff')
for(j in 1:length(sub)){
h<- list.files(path=sub[j], recursive = T, full.names = T, pattern='tiff')
d<-stack(h)
x<-stackApply(d, mean)
#writeRaster
}
我有一些困难要追求,我不确定我做了什么是正确的道路。谢谢你的帮助。
我收到以下错误:
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘nlayers’ for signature ‘"matrix"’
根据您的描述,您希望首先遍历 list.dirs
子文件夹,然后 list.files
遍历相应文件。现在,您的循环将 return 什么都没有,因为 sub 将是空的。考虑放置 print
语句来验证。
sub <- list.dirs(full.names=FALSE, recursive=FALSE)
for(j in 1:length(sub)) {
print(sub[j])
h <- list.files(path=sub[j], recursive=TRUE, full.names=TRUE, pattern='.tiff')
print(h)
d <- stack(h)
x <- stackApply(d, mean)
writeRaster(x, filename=paste0(sub[j], "_mean.tiff"), format="****", overwrite=TRUE)
}
请根据需要调整最后几行,因为我对使用栅格文件或 栅格 包一无所知。文件将保存在父文件夹中。
Below a solution that works well:
setwd("XXX/parent_fold")
library(raster)
sub <- list.dirs(full.names=FALSE, recursive=FALSE)
for(j in 1:length(sub)) {
print(sub[j])
h <- list.files(path=sub[j], recursive=TRUE, full.names=TRUE, pattern='.tiff')
print(h)
d <- stack(h)
mean <- stackApply(d, indices = rep(1,nlayers(d)), fun = "mean", na.rm = T)
writeRaster(mean, filename=paste0(sub[j], "_mean.tif"), overwrite=TRUE)
}