首页 > 解决方案 > if (S == 0) { : 需要 TRUE/FALSE 的缺失值}, raster::calc

问题描述

我有一个 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.slop <- raster::calc(st,tsfun)

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

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

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

标签: rstackraster

解决方案


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

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

推荐阅读