簡體   English   中英

如何使用R計算柵格堆棧上的Sen斜率

[英]How to compute Sen's slope on raster stack using R

我有36層柵格堆棧(指定區域的年降雨量)。 當我嘗試使用以下代碼計算Sen的斜率時:

library(raster)
library(trend)
# example data
s <- stack(system.file("external/rlogo.grd", package="raster")) 
s <- stack(s, s* 2, s*3)

func <- function(x) { unlist(sens.slope(x)) }
sen.slop <- calc(s, fun=func)

它返回以下錯誤

Error in .local(x, values, ...) : 
 values must be numeric, integer or logical.

有沒有人可以幫我解決問題?

sens.slope返回類htest的對象,包括數值,但也包括字符值。 要制作光柵,您需要選擇所需的數值。 例如:

library(raster)
library(trend)
s <- stack(system.file("external/rlogo.grd", package="raster")) 
s <- stack(s, s* 2, s*3)
func <- function(x) { unlist(sens.slope(x)[1:3]) }
sen.slop <- calc(s, fun=func)

要理解的是,在將自己的函數提供給calc您應該檢查它的行為。 例如,比較:

set.seed(9);
v <- runif(100) * 1:100
# original function
func <- function(x) { unlist(sens.slope(x)) }

func(v)
# estimates.Sen's slope            statistic.z                p.value           null.value.z            alternative              data.name                 method            parameter.n 
# "0.40383510858131"      "6.6084411517969" "3.88387866698504e-11"                    "0"            "two.sided"                    "x"          "Sen's slope"                  "100" 

# Yikes! character output. 

...使用此函數返回的內容

func <- function(x) { unlist(sens.slope(x)[1:3]) }
func(v)
# estimates.Sen's slope           statistic.z               p.value 
#          4.038351e-01          6.608441e+00          3.883879e-11 

 # better!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM