[R-sig-Geo] calc, overlay and raster stacks

Robert J. Hijmans r.hijmans at gmail.com
Fri Nov 19 15:56:32 CET 2010


Hi Agus,

Your example with overlay works for me. I think you need to update
'raster' . In earlier versions many functions only worked for
RasterLayer objects, now most functions also support multi-layer
(RasterStack or RasterBrick) objects.

Robert

On Fri, Nov 19, 2010 at 8:50 AM, Agustin Lobo <alobolistas at gmail.com> wrote:
> Hi!
>
> I have to set as NA data in a 3D array (time series of images)
> according to values in another 3D array of Quality flags
>
> #Example
> NDVI = round(array(rnorm(5*5*3,180,10),dim=c(5,5,3)))
> SM = array(rep(248,5*5*3),dim=c(5,5,3))
> SM[4,3:4,1:2] = 232
> SM[2,3:4,1:2] = 243
> SM[3,4,1:2] = 243
>
> #The only valid data are the ones for which SM is either 232 or 248, so:
> NDVI[SM!=248] <- NA
> NDVI[SM!=232] <- NA
> #which is the same as
> NDVI[SM!=248 & SM!=232] <- NA
>
> #The problem is that what I really have are images 3697 columns x
> 1905 rows and 360 Bands (and even larger) , so I try package raster
>
> require(rgdal)
> require(raster)
>
> #First, I make fake data:
> rNDVI = stack(raster(NDVI[,,1]),raster(NDVI[,,2]),raster(NDVI[,,2]))
> rSM = stack(raster(SM[,,1]),raster(SM[,,2]),raster(SM[,,2]))
>
> fun <- function(x,y) { x[y!=248 & y!=232] <- NA; return(x)}
>> rc <- overlay(rNDVI, rSM, fun)
> Error in function (classes, fdef, mtable)  :
>  unable to find an inherited method for function "overlay", for
> signature "RasterStack", "RasterStack"
> Calls: overlay -> <Anonymous>
>
> #It seems that calc() must be used for stacks, but seems to me that calc()
> #only accepts one stack, not two. Maybe I should just stack both NDVI and SM?
>
> Thanks!
> Agus
>



More information about the R-sig-Geo mailing list