r - 在 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)
任何帮助将不胜感激。
解决方案
使用您的对象创建一个列表,然后使用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))
推荐阅读
- python - 为什么 pandas Dataframe 允许将字符串列与时间戳列进行比较?什么是逻辑
- android - 我应该使用什么版本的 firebase 和 google maps?
- python - 在 `str.format()` 中使用多个 if 条件
- batch-file - 将批处理脚本输出写入隐藏文件夹?
- macos - 在 Macos 中监视调用 dylib 的参数
- django - 如何通过单击按钮打开模板
- php - 如何从数组中获取值?
- python - python3 将颜色代码转换为不同的类型,而我不想这样做
- typescript - 使用 nest.js 运行 docker 命令
- php - 使用队列将数据插入表中