Hi Jackson,
All the layers of the toy dataset you create in your example are
identical. Is that intentional?
Below I create a more heterogeneous dataset and introduce a few NAs.
library(raster)
library(trend)
set.seed(12)
r <- raster(nrow=10, ncol=10)
s <- lapply(1:200, function(i) setValues(r, rnorm(ncell(r),
sample.int(5,1), 0.5)))
s <- stack(s)
s[s < 0] <- NA
# Visualize that some pixels have NAs and other don't
hasna <- stackApply(s, indices = 1, fun = function(x, na.rm){anyNA(x)})
plot(hasna)
# pettitt.test function does not handle NAs, so you need to add a condition
# to "exclude" vectors that contain NAs
fun <- function(x){
out <- ifelse(anyNA(x),
yes = NA,
no = unname(pettitt.test(x)[3]$estimate))
return(out)
}
# Check that it works
fun(as.vector(s[1])) # first pixel, does not contain NAs
fun(as.vector(s[2])) # second pixel, contains NAs
# Check that it works with calc
s_out <- calc(s, fun = fun)
plot(s_out)
Cheers,
Lo?c
On 05/08/2020 03:59 PM, Jackson Rodrigues wrote:
Dear all,
I am sorry for previous email. I am learning how to handle correctly this
list.
On R-sig-Geo Digest, Vol 201, Issue 5 I got a smart solution for my
with parallelization.
However, my original data has NA values, and applying the function
to my data I get some errors.
I have played around with other commands like na.rm, na.action=na.exclude
or reclassifications and none worked.
Could someone give me some herp again?
best wishes,
Jackson
################
library(raster)
library(trend)
r <- raster(ncol=96, nrow=63, vals=runif(63*96))
n <- 672 # number of copies
s <- stack(lapply(1:n, function(i) rz<-stack(r[i]<-(r^2/3))))
s[s < 0.1] <- NA
# Define the function to apply to each pixel; it should return a numeric
or a vector of numerics with always the same lenght
fun <- function(x){
out <- pettitt.test(x)[3]$estimate
return(unname(out))
}
# Check that it works
fun(seq(2000))
# Check that it works with calc
s_out <- calc(s, fun = fun)
Error in .calcTest(x[1:5], fun, na.rm, forcefun, forceapply) :
cannot use this function
# Parallelize with clusterR
beginCluster()
s_out <- clusterR(s, fun=calc, args=list(fun=fun))
[1] "cannot use this function"
attr(,"class")
[1] "snow-try-error" "try-error"
Error in clusterR(s, fun = calc, args = list(fun = fun)) : cluster error
endCluster()
##############
[[alternative HTML version deleted]]