# [R-sig-Geo] Error running Mann-Kendall trend test on a raster stack

Thiago V. dos Santos thi_veloso at yahoo.com.br
Fri Feb 26 21:49:40 CET 2016

Dear colleagues,

I have a raster stack with 89 layers, each layer representing yearly precipitation.

I am trying to use the function rkt (from package "rkt") to detect a possible trend in my precipitation time series.

Its usage is pretty simple, and this is how it runs on a data frame:

--------------------------------
library(rkt)

# generate some random data
myDF <- data.frame(Date = seq.Date(as.Date("2011-01-01"), as.Date("2099-01-01"), by='year'),
value = runif(89,0,1200))

# extract year from date, as numeric
myDF\$year <- as.numeric(format(myDF\$Date, "%Y"))

# run mann-kendall test
kenn <- rkt(myDF\$year, myDF\$value)
kenn

--------------------------------

Now, this is my attempt to apply this test on a raster stack, using a calc function:

--------------------------------
library(raster)

# Create the date sequence
idx <- myDF\$Date

# Create raster stack and apply the date
r <- raster(ncol=50, nrow=50)
s <- stack(lapply(1:length(idx), function(x) setValues(r, runif(ncell(r), 0, 1200))))
s <- setZ(s, idx)
s

# Now I define a function
tsfun <- function(x) {
year <- as.numeric(substr(getZ(x), 1, 4))
r.kenn <- rkt(year, x)
return(r.kenn)
}

# I apply the function
raster.kenn <- calc(s, fun=tsfun)

--------------------------------

And the error message I get is:

Error in .calcTest(x[1:5], fun, na.rm, forcefun, forceapply) :
cannot use this function

What am I doing wrong here?
Greetings,
-- Thiago V. dos Santos

PhD student
Land and Atmospheric Science
University of Minnesota