我希望循环浏览R中父文件夹中的不同子文件夹。我确切地知道我是R的新用户。我有10个子文件夹位于1个父文件夹中。每个子文件夹包含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"’
答案 0 :(得分:0)
根据您的描述,您希望首先遍历list.dirs
寻找子文件夹,然后list.files
寻找相应的文件。现在,您的循环将不会返回任何内容,因为 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)
}
请根据需要调整最后一行,因为我对使用rasterfiles或 raster 包一无所知。文件将保存在父文件夹中。
答案 1 :(得分:0)
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)
}