首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何同时计算多个波段的R光栅?

如何同时计算多个波段的R光栅?
EN

Stack Overflow用户
提问于 2016-05-09 14:48:05
回答 1查看 315关注 0票数 0

我试着计算72波段光栅。如果前36波段值(近红外波段)大于后36波段值(短波红外波段),则将其赋值为0;如果没有,则继续执行以下功能。我尝试过其他编写方法(基本上是相同的逻辑),同样的错误也会出现。这是我写的函数:

代码语言:javascript
复制
raster_stack <- stack("NIR.bin", "SWIR.bin")
#ndii = NIR - SWIR/NIR+SWIR

fun <- function(x) {
       x[is.na(x)] <- 0;
       if (x[37:72] >= x[1:36]){
           0} else {
               ndii <- ((x[1:36]-x[37:72]) / (x[1:36]+x[37:72]));
               silent=TRUE;
               return(ndii)
              }
}
ndii <- calc(raster_stack, fun)

错误消息总是如下所示:

setValues中的错误(out,x):值必须是数字、整数、逻辑或因子

我添加x[is.na(x)] <- 0是为了去掉NA值,但它似乎没有帮助。对解决这个问题有什么见解吗?

EN

回答 1

Stack Overflow用户

发布于 2016-05-30 18:55:22

有几个问题。您的if语句不太好,因为您正在比较36个值。此外,您还需要将数据视为一个矩阵。

代码语言:javascript
复制
library(raster)
raster_stack <- stack("NIR.bin", "SWIR.bin")
#ndii = NIR - SWIR/NIR+SWIR

fun <- function(x) {
    y <- (x[,1:36]-x[,37:72]) / (x[,1:36] + x[,37:72])
    i <- x[,37:72] >= x[,1:36]
    y[i] <- 0
    y
}
ndii <- calc(raster_stack, fun)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37118800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档