[R-sig-Geo] problem with extract() raster package using weight=TRUE

Ariel Ortiz-Bobea ortiz-bobea at rff.org
Mon Sep 23 17:52:43 CEST 2013


That's much clever than my longer workaround using rasterize and zonal.

By the way, Umberto, my workaround could help you get more precision on the
extract weights. Hope this help others looking to do the same. See code
below:

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

# Create raster
   library(raster)
   r <- raster(ncol=36, nrow=18)
   r[] <- 1:ncell(r)
   cds1 <- rbind(c(-180,-20), c(-160,5), c(-60, 0), c(-160,-60),
c(-180,-20))
   cds2 <- rbind(c(80,0), c(100,60), c(120,0), c(120,-55), c(80,0))
   polys <- SpatialPolygons(list(Polygons(list(Polygon(cds1)), 1),
         
# visualize
   plot(r)
   plot(polys, add=T)
     
# Extract the cellnumbers and weights using extract()
   v <- extract(r, polys, weights=TRUE, cellnumbers=TRUE, small=TRUE)

# Extract the cellnumbers and weights using rasterize() and zonal()
   r.mod <- r
   values(r.mod) <- 1:ncell(r)
   fac <- sqrt(1000) # this is where you set the resolution factor
   r.mod <- disaggregate(r.mod, fact=c(fac, fac)) # increases raster
resolution by a factor of "fac"
   r.polys <- rasterize(x=polys, y=r.mod) # rasterize county polygons

   # Compute weights
   w <- lapply(unique(r.polys), function(x) {
      m <- r.polys
      m[getValues(m)!=x]  <- NA
      m[getValues(m)==x]  <- 1
      out <- zonal(x=m, z=r.mod, fun="sum")
      colnames(out) <- c("cell", "weight")
      out[,"weight"] <- out[,"weight"]/(fac^2)
      out[out[,"weight"]!=0,]
     })
   names(w) <- unique(r.polys)

# See weigths
 head(v[[1]])
 head(w[[1]]) 



-----
Ariel Ortiz-Bobea
Fellow at Resources for the Future
--
View this message in context: http://r-sig-geo.2731867.n2.nabble.com/problem-with-extract-raster-package-using-weight-TRUE-tp7584665p7584693.html
Sent from the R-sig-geo mailing list archive at Nabble.com.



More information about the R-sig-Geo mailing list