【问题标题】:For loop inside the function or other way around函数内部的for循环或其他方式
【发布时间】:2021-02-07 15:17:11
【问题描述】:

我找不到如何将此函数编写为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)

【问题讨论】:

    标签: r function for-loop raster


    【解决方案1】:

    这可能会有所帮助:

    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)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多