这是一个很难回答的问题,因为您没有提供示例数据。这就是我调试它的方法。使用循环而不是calc,这样您就可以找出它(第一次)失败的地方。检查情况,修理
tsfun
然后再试一次(可能从i的最后一个值开始)。
result <- raster(input_stack)
j <- 1
for (i in j:ncell(input_stack)) {
result[i] <- tsfun(input_stack[i], na.rm=TRUE)
}
j <- i
input_stack[i]
tsfun(input_stack[i])
修理
茨法恩
再试一次,从失败的地方重新开始
for (i in j:ncell(input_stack)) {
result[i] <- tsfun(input_stack[i])
}
我注意到你的功能
茨法恩
有一个
na.rm
未使用的参数,并且在第二个参数后缺少括号
return(NaN
. 回来可能更合适
NA
. 另外,第一行代码是多余的,因为第二行代码是多余的。在我看来,它还可以处理大部分或全部
钠
所以你不需要这些。所以可以重写为:
tsfun2 <- function(x) {
if length(na.omit(x)) < 3) { return(NA) }
return(zyp.trend.vector(x)[["trend"]]
}
或做
result = calc(input_stack, fun=function(x) { zyp.trend.vector(x)[["trend"]] } )
例如:
library(raster)
library(zyp)
s <- stack(system.file("external/rlogo.grd", package="raster"))
ss <- stack(s, sqrt(s))
result <- calc(ss, fun=function(x) { zyp.trend.vector(x)[["trend"]] } )