r语言 - 函数内的For循环或其他方式



我找不到如何将此函数写为for循环:函数内的for循环,或for循环内的函数?哪个更合适?

另外,我需要每次用新名称保存新栅格。我分享了我需要帮助的代码部分。

uav_dirs <- c("C:/Rs_Code/t_data/Data/UAV/DSM")
uav_fs <- do.call(c, lapply(uav_dirs, list.files, pattern = "tif$", full.names = TRUE))
UAV_Stack <- stack(uav_fs)

#Canopy Height Calculation 
chmCalc <- function(DTM, DSM) {
return(DSM - DTM)
}
CHM_UAV_H1 <- chmCalc(UAV_Stack[[8]],UAV_Stack[[1]])
writeRaster(CHM_UAV_H1, filename=file.path(chmwd, "CHM_UAV_H1.tif"), format="GTiff", overwrite=TRUE)
CHM_UAV_H2 <- chmCalc(UAV_Stack[[8]],UAV_Stack[[2]])
writeRaster(CHM_UAV_H2, filename=file.path(chmwd, "CHM_UAV_H2.tif"), format="GTiff", overwrite=TRUE)
CHM_UAV_H3 <- chmCalc(UAV_Stack[[8]],UAV_Stack[[3]])
writeRaster(CHM_UAV_H3, filename=file.path(chmwd, "CHM_UAV_H3.tif"), format="GTiff", overwrite=TRUE)
CHM_UAV_H4 <- chmCalc(UAV_Stack[[8]],UAV_Stack[[4]])
writeRaster(CHM_UAV_H4, filename=file.path(chmwd, "CHM_UAV_H4.tif"), format="GTiff", overwrite=TRUE)

这可能有帮助:

chmCalc <- function(DTM, DSM) {
return(DSM - DTM)
}
my_list <- list()
for (i in 1:4) {
res <- chmCalc(UAV_Stack[[8]],UAV_Stack[[i]])
my_list[i] <- res
}
names(my_list) <- c(1:4)
sapply(names(my_list),
function(x) writeRaster(my_list[[x]], filename=file.path(chmwd, paste0("CHM_UAV_H",x, ".tif", collapse=""), format="GTiff", overwrite=TRUE)))

最新更新