if (S == 0) {: пропущенное значение там, где требуется TRUE / FALSE}, растр :: calc - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть растровый стек из 70 слоев (те же месяцы через 70 лет подряд), и я пытаюсь найти тренд (с предварительным отбеливанием).

Поскольку pwmk применяется только к векторам, я написал приведенная ниже функция (tsfun) для применения «pwmk» к моему растровому стеку и извлечения наклона сена.

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

Затем я использовал raster :: cal c, как показано ниже, для вычисления наклона сена

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

У меня есть несколько временных рядов (разные месяцы за все 70 лет), и я уже применил этот процесс ко всем из них. У меня есть проблемы только с 3 месяцами одной-единственной переменной, для которой я получаю следующую ошибку.

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

Любая помощь или предложения будут определенно полезны и оценены.

1 Ответ

1 голос
/ 12 февраля 2020

Вот одно условие, которое приводит к этой ошибке.

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
...