在 R 中创建一个循环以根据存储文件的变量名称命名(保存)文件
Creating a loop in R to name (save) files based on the name of the variable they're stored in
这可能是一个基本问题,但我仍然需要一些帮助来弄清楚我应该做什么。
我的代码非常简单,有一堆计算来获取存储在变量中的光栅文件: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))
这可能是一个基本问题,但我仍然需要一些帮助来弄清楚我应该做什么。 我的代码非常简单,有一堆计算来获取存储在变量中的光栅文件: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))