Эффективный способ сохранить несколько растров в одном .pdf с помощью R - PullRequest
0 голосов
/ 29 мая 2020

Я новичок в 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()

Заранее благодарю за помощь!

1 Ответ

0 голосов
/ 30 мая 2020

Начните с вектора имен файлов, который вы можете получить с помощью 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()

Или используйте al oop

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...