多个嵌套for循环仅在R中的i=j=k索引下迭代

多个嵌套for循环仅在R中的i=j=k索引下迭代,r,gis,raster,rgdal,r-modis,R,Gis,Raster,Rgdal,R Modis,我一直在尝试计算三个光栅文件的像素数,这些文件满足R的特定条件(在Windows 10和R版本3.6.3中)。我们的想法是使用这三幅图像(经过预处理)并计算满足以下代码的if语句中条件的像素数量 library(rgdal) library(raster) mydir<- file.path("D:/files") setwd(mydir) listado1 <- list.files(pattern="crNDVI*") listado2 <-

我一直在尝试计算三个光栅文件的像素数,这些文件满足R的特定条件(在Windows 10和R版本3.6.3中)。我们的想法是使用这三幅图像(经过预处理)并计算满足以下代码的
if
语句中条件的像素数量

library(rgdal)
library(raster)  

mydir<- file.path("D:/files")
    setwd(mydir)

    listado1 <- list.files(pattern="crNDVI*")
    listado2 <- list.files(pattern="crNBR*")
    listado3 <- list.files(pattern="dNBR*")

    df <- data.frame(NULL)


    for (i in 1:length(listado1)) {
      r1 <- raster(listado1[i])
      v1 <- values(r1)

      for (j in 1:length(listado2)) {
        r2 <- raster(listado2[j])
        v2 <- values(r2)

        for (k in 1:length(listado3)) {
          r3 <- raster(listado3[k])
          v3 <- values(r3)

          if ((i==j) & (j==k)){

            df2 <- data.frame(NULL)
            df2 <- data.frame(v1, v2, v3)
            burn <- subset(df2, df2$v1 >= 0.3 & df2$v1 <= 1.0 & df2$v2 >= 0.2 & df2$v2 <= 1.3 & df2$v3 > 0.1 & df2$v3 <= 1.3)
            burned_area <- nrow(burn)*(xres(r1)*yres(r1))*10^(-4) # Hectares

            name <- paste(substr(listado1[i], 8, 15), sep="")
            df <- rbind(df, data.frame(name,burned_area))
            print(paste("iteracion:",i,j,k," ok",sep = " "))

          }
          else {
            print(paste("iteracion:",i,j,k," passed",sep = " "))
            invisible()}

        }
      }
    }

    write.csv(df,file = "burned_area.csv")
库(rgdal)
图书馆(光栅)

mydir嵌套循环需要什么?如果使用一个循环,则i=j=k始终为真。

请始终包含一个最小的自包含示例。像这样

library(raster)
set.seed(0)
r1 <- raster(nrow=10, ncol=10, vals=1:100) / 100
r2 <- raster(nrow=10, ncol=10, vals=c(1:50, 50:1)) / 100
r3 <- raster(nrow=10, ncol=10, vals=c(rep(1, 10), 11:100)) / 100

x <- ((r1==r2) & (r2==r3))
s <- stack(r1, r2, r3)
s <- mask(s, x, maskvalue=1)
库(光栅)
种子集(0)

r1嵌套for循环适用于每个组合。如果要并行迭代,即
i=1,j=1,k=1
,然后
i=2,j=2,k=2
,那么这只是一个循环<代码>对于(i in 1:length(listado1)){j Oh Gregor,我刚刚读了这个…如果这是一个答案,我会给你支票的。谢谢你的帮助。我做到了(正如其他用户回答的那样)非常好。嘿,罗伯特。谢谢你的建议。不过,我觉得没有必要这样做,因为我相信这会使问题变得更复杂。这个问题与R中的嵌套循环有关,与光栅分析无关。这就是为什么我在这个论坛上发帖子,而不是在GIS上发帖子的原因。然后,更重要的是,你要重新处理你的问题假设。在这种情况下,你不应该包括光栅数据并创建一些简单的示例数据。很难理解你想做什么或你的问题到底是什么。嘿,罗伯特,再次感谢。我的问题解决了,因此那些试图帮助我的人都理解了。祝你一周愉快。谢谢!当我读到它时,似乎很明显你说的,很有魅力。