迭代栅格波段进行计算

问题描述 投票:0回答:1

我一直在尝试运行此代码,但收到错误:二元运算符的非数字参数。我尝试过堆叠然后迭代它们以执行计算。不幸的是,它不能正常工作。它扰乱了光栅波段元数据,并且似乎将所有波段压缩为一张图像,而不是九个单独的图像。所以我试图在不堆叠带的情况下做到这一点,而是通过方程迭代运行它们。有什么建议吗?

我尝试使用两个光栅波段列表来运行此计算,一个是“红色”,另一个是“nir”。每个列表包含九个栅格波段,并且列表按顺序排列,以便一个列表中的第一个栅格波段与另一个列表中的第一个栅格波段来自同一图像。我尝试添加 as.numeric,但它仍然不起作用 - 也许我没有正确输入它。

subfolders <- '~/Desktop/hls project/fieldszn'
bands <- list.files(subfolders, pattern = ".tiff", recursive = TRUE, full.names = TRUE)

red = list(list.files(subfolders, pattern = "red", full.names = TRUE, recursive = TRUE))
nir = list(list.files(subfolders, pattern = "nir", full.names = TRUE, recursive = TRUE))


calculate_ndvi <- function(nir, red){
  ndvi <- (nir-red)/(nir+red)
  return(ndvi)}


ndvi <- list()
for (i in 1:9){ 
  ndvi[[i]] <- (calculate_ndvi(nir[[i]], red[[i]]))
}
r function for-loop matrix raster
1个回答
0
投票

它应该像这样工作

library(terra)

# do not make a list
red <- list.files(pattern = "red")
nir <- list.files(pattern = "nir")

calculate_ndvi <- function(nir, red){
  (nir-red)/(nir+red)
}

ndvi <- list()
for (i in 1:9){ 
  rnir <- rast(nir[i])
  rred <- rast(red[i]) 
  ndvi[[i]] <- calculate_ndvi(rnir, rred)
}
© www.soinside.com 2019 - 2024. All rights reserved.