【问题标题】:if (S == 0) { : missing value where TRUE/FALSE needed}, raster::calcif (S == 0) { : 需要 TRUE/FALSE 的缺失值}, raster::calc
【发布时间】:2020-02-11 19:54:27
【问题描述】:

我有一个 70 层的栅格堆栈(连续 70 年中的同一个月)并试图找到趋势(使用预白化)。

由于 pwmk 只应用于向量,我在下面写了一个函数 (tsfun) 来将“pwmk”应用于我的 rasterstack 并提取 sen 的斜率。

tsfun = function(st,na.rm=TRUE){
if(all(is.na(st))){return(NaN)}
return(pwmk(st)[["Sen's Slope"]])
}

然后我使用如下的 raster::calc 来计算 sen 的斜率

sen.slop <- raster::calc(st,tsfun)

我有多个时间序列(所有 70 年的不同月份),并且已经将这个过程应用于所有时间序列。我只有一个变量 3 个月的问题,为此我收到以下错误。

Error in if (S == 0) { : missing value where TRUE/FALSE needed}

任何帮助或建议肯定会有所帮助和赞赏。

【问题讨论】:

    标签: r stack raster


    【解决方案1】:

    这是导致此错误的一种情况。

    library(modifiedmk)
    pwmk(rep(0, 3))[["Sen's Slope"]]
    # Error in if (S == 0) { : missing value where TRUE/FALSE needed
    

    所以您需要在tsfun 中捕获这些案例。或许可以按照以下方式做一些事情:

    tsfun = function(st,na.rm=TRUE){
       if(all(is.na(st))){return(NaN)}
       if(length(unique(st)) == 1){return(0)}
       return(pwmk(st)[["Sen's Slope"]])
    }
    

    试试看

    tsfun(rep(10,3))
    #[1] 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-27
      • 1970-01-01
      • 2019-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      相关资源
      最近更新 更多