[R-sig-Geo] questions on RasterStack/Brick
lberner at whrc.org
lberner at whrc.org
Tue Jul 26 22:21:16 CEST 2011
Dear all,
Robert suggested that, with a little patience, the following code could be
used to correlate two raster stacks:
r <- raster(s1)
for (i in 1:ncell(r)) {
r[i] <- cor(as.vector(cellValues(s1, i)), as.vector(cellValues(s2, i)))
}
Not having that much patience, my co-worked Pieter Beck and I wrote a
function to correlate two raster stacks of same x, y, and z extents. The
function is considerably faster than the code above:
stack.correlation <- function(stack1, stack2, cor.method, na.val, na.rm =
T){
# output template
cor.map <- raster(stack1)
# combine stacks
T12 <- stack(stack1,stack2)
NAvalue(T12) = na.val
# the function takes a vector, partitions it in half, then correlates
# the two sections, returning the correlation coefficient.
stack.sequence.cor <- function(myvec,na.rm=T){
myvecT1<-myvec[1:(length(myvec)/2)]
myvecT2<-myvec[(length(myvec)/2+1):length(myvec)]
return(cor(myvecT1,myvecT2, method = cor.method))
}
# apply the function above to each cell and write the correlation
# coefficient to the output template.
cor.map <- stackApply(T12, indices = rep(1, length(jul_mckenney)),
fun = stack.sequence.cor, na.rm = TRUE)
return(cor.map)
}
example call:
my.cor.map <- stack.correlation(tmp.jul, tmp.aug, cor.method = "spearman",
na.val = -9999)
Hope this helps,
Logan Berner
lberner at whrc.org
The Woods Hole Research Center
--
View this message in context: http://r-sig-geo.2731867.n2.nabble.com/questions-on-RasterStack-Brick-tp5553580p6623580.html
Sent from the R-sig-geo mailing list archive at Nabble.com.
More information about the R-sig-Geo
mailing list