在terra中使用ifel函数将栅格堆栈各层单独存为文件的问题
问题:ifel处理栅格堆栈后批量保存独立图层
我有一个包含数十个图层的大型栅格堆栈,希望使用ifel函数处理后直接将每个图层保存至磁盘,但ifel的filename参数仅能生成单个输出文件。查看ifel帮助文档发现它支持writeRaster的额外参数,而writeRaster可以单独保存每个图层,这正是我需要的。
测试代码
r <- rast(nrows=5, ncols=5, xmin=0, xmax=1, ymin=0, ymax=1) values(r) <- c(-10:0, NA, NA, NA, 0:10) s <- r*1.2 r.stack <- c(r, s) names(r.stack) <- c("r", "s") t <- rast(nrows=5, ncols=5, xmin=0, xmax=1, ymin=0, ymax=1) values(t) <- c(rep(1, 5), rep(2, 5), rep(3, 5), rep(2, 5), rep(3, 5)) x <- ifel(t==3, 5, r.stack, filename=paste("test",names(r.stack), ".tiff", sep="")) # 警告信息: # [cover] only the first filename supplied is used
当前输出
- 生成包含两个图层的单个.tiff文件
- 触发警告:
[cover] only the first filename supplied is used
期望输出
生成两个以图层名称命名的独立.tiff文件(即testr.tiff和tests.tiff)
解决方案
先通过ifel完成栅格处理,再调用writeRaster批量保存每个图层:
writeRaster(x, filename=paste("test",names(r.stack), ".tiff", sep=""))
内容的提问来源于stack exchange,提问作者kl-higgins
相关产品推荐
相关产品推荐

