2017-11-10 7 views
1

Ich habe 36 Schichten von Raster-Stack (jährliche Zusammenstellungen von Niederschlag über die angegebene Region). Als ich versuchte, Sen Steigung zu berechnen, indem Sie den folgenden Code:So berechnen Sie Sen Steigung im Raster-Stack mit R

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) 

Es gibt folgende Fehler

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

Gibt es jemanden, der mir das Problem zu lösen helfen kann?

+3

Ist das fehlende '" 'nach Design –

Antwort

2

sens.slope gibt ein Objekt der Klasse htest zurück, das numerische Werte, aber auch Zeichenwerte enthält. Um einen Raster zu erstellen, müssen Sie die gewünschten numerischen Werte auswählen. Z.B. :

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) 

Das, was zu verstehen ist, dass Sie Ihre eigene Funktion calc vor der Lieferung Sie sein Verhalten überprüfen sollte. Zum Beispiel vergleichen:

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. 

... mit dem, was von dieser Funktion

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! 
zurückgegeben
+0

@ RobertH Vielen Dank Ihr Code funktioniert perfekt? – Getachew

Verwandte Themen