summing rasters with a condition given by other rasters
Hi,
On May 10, 2015, at 7:37 AM, Martin Brandt <martin.brandt at mailbox.org> wrote:
Hi Ben,
many thanks for the detailed answer. The code works fine, but when I use
rasters for eos and sos instead of numbers, i get an error:
b <- brick(system.file("external/rlogo.grd", package="raster"))
b <- addLayer(b,b,b)
b
sos <- raster(system.file("external/rlogo.grd", package="raster"))
eos <- raster(system.file("external/rlogo.grd", package="raster"))
sum_segment <- function(x, from = sos, to = eos, ...) {
sum(x[from:to],...)
}
s <- calc(b, sum_segment)
Error in .calcTest(x[1:5], fun, na.rm, forcefun, forceapply) :
cannot use this function
am I doing something wrong?
Yes, as tempting as it is to do otherwise you really do have to use numeric position indices. Inside the function sum_segment the value of x is simple a numeric vector. Within the scope of the function the context of the pixels embedded in the raster object is temporarily "lost" - they are just a vector of numbers. To work with the calc() function you must first compute the position indices for sos and eos using which(). sos <- which(names(b) == "blue.1") # you would substitue the name of your layer for blue.1 eos <- which(names(b) == "green.3") # and again for green.3 Cheers, Ben
-- View this message in context: http://r-sig-geo.2731867.n2.nabble.com/summing-rasters-with-a-condition-given-by-other-rasters-tp7588222p7588226.html Sent from the R-sig-geo mailing list archive at Nabble.com.
_______________________________________________ R-sig-Geo mailing list R-sig-Geo at r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Ben Tupper Bigelow Laboratory for Ocean Sciences 60 Bigelow Drive, P.O. Box 380 East Boothbay, Maine 04544 http://www.bigelow.org