首页 > 解决方案 > 在 R 中创建一个循环以根据存储在其中的变量的名称来命名(保存)文件

问题描述

这可能是一个基本问题,但我仍然需要一些帮助来弄清楚我应该做什么。我的代码非常简单,有一堆计算可以获取存储在变量中的栅格文件:NDWI、NDWI、VSI 等。每个计算都基于一个卫星图像,其中的名称带有日期。我会找到一种方法来提取日期并将其存储在变量中。

本质上,我想要的是我的代码的一部分,它遍历所有创建的文件,以将它们保存为我笔记本电脑的特定路径中的栅格,采用这种格式(“变量名”_“日期”.tif。)

我现在拥有的:

Dossier <- "C:/Users/Perrin/Desktop/INRA/Raster/sentinel/L1C_T31UDR_A019210_20190225T105315/S2A_MSIL1C_20190225T105021_N0207_R051_T31UDR_20190225T125616.SAFE/GRANULE/L1C_T31UDR_A019210_20190225T105315/IMG_DATA"
library(raster)
list.files(Dossier)

Bande1 <- raster(list.files(pattern = "\\B01.jp2$"))
Bande2 <- raster(list.files(pattern = "\\B02.jp2$"))
Bande3 <- raster(list.files(pattern = "\\B03.jp2$"))
Bande4 <- raster(list.files(pattern = "\\B04.jp2$"))


NDVI <- (Bande8-Bande4)/(Bande8+Bande4)
NDWI <- (Bande8A-Bande11)/(Bande8A-Bande11)
NDDI <- (NDVI-NDWII)/(NDVI+NDWII)

writeRaster(NDWI, "C:/Users/Perrin/Desktop/INRA/résultats R/NDWI.tif", overwrite = T)
writeRaster(NDVI, "C:/Users/Perrin/Desktop/INRA/résultats R/NDVI", overwrite = T)
writeRaster(NDDI, "C:/Users/Perrin/Desktop/INRA/résultats R/NDDI.tif", overwrite = T)

任何帮助将不胜感激。

标签: rgisraster

解决方案


使用您的对象创建一个列表,然后使用Map它来循环它:

rasterList <- list(NDVI = NDVI, NDWI = NDWI, NDDI = NDDI)
filenames<-sprintf("C:/Users/Perrin/Desktop/INRA/résultats R/%s_%s.tif", 
                    names(rasterList), format(Sys.Date(), "%Y%m%d"))
Map(writeRaster, rasterList, filenames, MoreArgs = list(overwrite = TRUE))

推荐阅读