首页 > 解决方案 > 使用 R 在单个 .pdf 中保存多个栅格的有效方法

问题描述

我对 R 很陌生,想知道是否有比手动输入每个栅格文件名更快的方法来在单个 .pdf 中保存多个栅格,如下所示:

pdf(file = "file_name.pdf", width = 11, height = 8.5)
plot(raster(file.path(dir_path_data,"nutrient_pollution_2003_impact.tif")))
plot(raster(file.path(dir_path_data,"nutrient_pollution_2004_impact.tif")))
plot(raster(file.path(dir_path_data,"nutrient_pollution_2005_impact.tif")))
plot(raster(file.path(dir_path_data,"nutrient_pollution_2006_impact.tif")))
plot(raster(file.path(dir_path_data,"nutrient_pollution_2007_impact.tif")))
plot(raster(file.path(dir_path_data,"nutrient_pollution_2008_impact.tif")))
plot(raster(file.path(dir_path_data,"nutrient_pollution_2009_impact.tif")))
plot(raster(file.path(dir_path_data,"nutrient_pollution_2010_impact.tif")))
plot(raster(file.path(dir_path_data,"nutrient_pollution_2011_impact.tif")))
plot(raster(file.path(dir_path_data,"nutrient_pollution_2012_impact.tif")))
plot(raster(file.path(dir_path_data,"nutrient_pollution_2013_impact.tif")))
plot(raster(file.path(dir_path_data,"nutrient_pollution_2003-2013_trend.tif")))
dev.off()

预先感谢您的帮助!

标签: r

解决方案


从文件名向量开始,您可以通过 list.files 获得。或许像这样

f <- list.files(dir_path_data, pattern="^nutrient_pollution.*\\.tif$", full=TRUE)

您现在可以使用lapply

library(raster)
pdf(file = "file_name.pdf", width = 11, height = 8.5)
lapply(f, function(n) plot(raster(n)))
dev.off()

或者使用循环

pdf(file = "file_name.pdf", width = 11, height = 8.5)
for (n in f) {
   r <- raster(n)
   plot(r)
}
dev.off()

如果栅格具有相同的范围和分辨率,您也可以这样做

s <- stack(f)
pdf(file = "file_name.pdf", width = 11, height = 8.5)
for (1 in 1:nlayers(s)) {  
   plot(s[[i]])
}
dev.off()

推荐阅读