R Raster - 创建具有条件循环遍历多个图层的图层

R Raster - Create layer with conditionals looping through multiple layers

我正在使用时间序列栅格块。这块砖有 365 层,代表一年中每一天的价值。

我想创建一个新层,其中每个单元格都包含一年中满足特定条件的天数。

我目前的做法如下(APHRO 是光栅砖),但是 returns 下面的错误消息:

enter code here
r <- raster(ncol=40, nrow=20)
r[] <- rnorm(n=ncell(r))
APHRO <- brick(x=c(r, r*2, r))    
NewLayer <- calc(APHRO, fun=FindOnsetDate(APHRO))

返回此错误:

 Error in .local(x, ...) : not a valid subset 

以及正在解析的函数:

FindOnsetDate <- function (s) {
  x=0  
  repeat {
    x+1
    if(s[[x]] >= 20 | s[[x]] + s[[x+1]] >= 20 & ChkFalseOnset() == FALSE)
    {break}
  }
  return(x);
}

第三个条件的函数为:

ChkFalseOnset <- function (x) {



  for (i in 0:13){

    if (sum(APHRO[[x+i:x+i+7]]) >= 5)
    {return(FALSE); break}
    return(TRUE)  
  }
}

提前致谢!!!!

如果我应该提供更多信息,请告诉我 - 尽量保持简洁。

我建议采用基本的两步流程。以 365 天为例:

set.seed(123)

r <- raster(ncol=40, nrow=20)

r_list <- list()

for(i in 1:365){
  r_list[[i]] <- setValues(r,rnorm(n=ncell(r),mean = 10,sd = 5))
}

APHRO <- brick(r_list)

对每次迭代使用基本逻辑测试:

r_list2 <- list()

for(i in 1:365){
  if(i != 365){
    r_list2[[i]] <- APHRO[[i]] >= 20 | APHRO[[i]] + APHRO[[i+1]] >= 20
  }else{
    r_list2[[i]] <- APHRO[[i]] >= 20
  }
}

按年份计算总和:

NewLayer <- calc(brick(r_list2), fun=sum)

plot(NewLayer)

问题是你的功能不好:

FindOnsetDate <- function (s) {
   x=0  
   repeat {
     x+1
     if(s[[x]] >= 20 | s[[x]] + s[[x+1]] >= 20)
     {break}
   }
   return(x);
 }
 FindOnsetDate(1:100)
 #Error in s[[x]] : 
 # attempt to select less than one element in get1index <real>

也许是这样的:

FindOnsetDate <- function (s) {
   j <- s + c(s[-1], 0)
   sum(j > 20 | s > 20)
   # if all values are positive, just do sum(j > 20)
}
FindOnsetDate(1:20)
#10

现在有效:

 r <- calc(APHRO, FindOnsetDate)