[R-br] Comparar 2 rasterbricks usando pacote TSdist
Jackson Rodrigues
jacksonmrodrigues em gmail.com
Qui Maio 28 09:40:27 -03 2020
Pessoal
Bom Dia!
Estou com uma demanda aqui e não estou consigo enxergar onde estou errando.
Preciso comparar 2 rasterbricks usando a função de dissimilaridade
CorDistance do pacote TSdist.
No entanto ela não funciona com NA's.
Eu tentei remover ou ignorar os NA's sem sucesso.
Alguém poderia me dar uma luz sobre como proceder?
Abaixo está uma cópia do código que estou trabalhando.
Saudações,
Jackson
###################
library(raster)
library(TSdist)
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
s2<-s^2
# Visualizando que alguns pixels são NA
hasna <- stackApply(s, indices = 1, fun = function(x, na.rm){anyNA(x)})
hasna2 <- stackApply(s2, indices = 1, fun = function(x, na.rm){anyNA(x)})
par(mfrow=c(1,2))
plot(hasna);plot(hasna2)
# CorDistancenão funciona com NA
CorDistance(as.vector(s[1]),as.vector(s2[1]))
[1] 0.2192382
CorDistance(as.vector(s[2]),as.vector(s2[2]))
<simpleError in .common.ts.sanity.check(x): NA in the series>
[1] NA
fun <- function(x,y){
out <- ifelse(anyNA(x) | anyNA(y), #Preciso resolver esta questão
yes = NA,
no = unname(CorDistance(x,y)))
return(out)
}
# Aqui funciona
fun(as.vector(s[1]),as.vector(s2[1]))
[1] 0.2192382
# Aqui não funciona
fun(as.vector(s[2]),as.vector(s2[2]))
[1] NA
new_s1 <- fun(s,s2)
<simpleError in if (any(is.na(x))) { stop("NA in the series")}:
argument is not interpretable as logical>
# Veja que não funciona com calc
new_s2 <- calc(s,s2, fun = fun)
Error in .calcTest(x[1:5], fun, na.rm, forcefun, forceapply) :
cannot use this function
plot(s_out)
#############
--
Jackson M. Rodrigues
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20200528/519747c0/attachment.html>
Mais detalhes sobre a lista de discussão R-br