Jonathan - Thanks for this suggestion. I will try to code something along
these lines and report back to the group if I have success.


On Tue, Jun 24, 2014 at 9:04 AM, Jonathan Greenberg <jgrn@illinois.edu>
wrote:

> Just to be clear, what you are really asking for is a function applied
> to a focal window not at every pixel location, but centered on e.g.
> every 15th pixels (so the focal windows don't overlap), correct?  If
> so, as you noted this isn't what rasterEngine is designed for in the
> way you are running it -- it takes 200 times longer, of course,
> because each pixel using a 15x15 window is 225 pixels needed to
> calculate an output.
>
> I don't think aggregate takes more than 1 layer as an input (Robert?
> Is this something that you could mod easily?) which is your problem.
>
> You could solve this with rasterEngine is a bit of a backwards way --
> if your "input" to rasterEngine (which sets the
> extent/projection/resolution of the output) is actually the output,
> aggregated file (blank), and one of the input variables is your input
> file, you could write a function that uses the pixel position to pull
> data from the input file.  projectRaster_rigorous (look at the source
> code -- it is simply a rasterEngine function) shows an example of this
> "start from the end" solution.  You won't want to use the polygon
> cropping approach, however, you'll want to use a quicker function
> (e.g. getValuesBlock would be a good one).
>
> Basically:
>
> input to rasterEngine: a blank aggregated file, chunk_format="raster"
> function inputs: blank aggregated file, high resolution file, window size
> function:
> - determine the pixel coordinates of each pixel in the "chunk" of the
> blank file (note that since chunk_format is set to "raster" instead of
> "array", you will have access to all of the geographic information of
> that chunk)
> - loop through each pixel in the chunk and use its pixel coordinates
> to set the parameters for getValuesBlock -- the starting row will need
> to be the current pixel minus 7 pixels (if a 15x15 window)
> ---> special note: you will need to be careful with edge pixels, since
> you may ask for a chunk that runs off the edge of your high rez image
> - getValuesBlock from your high resolution file (one per pixel in the
> chunk), run your analysis, return 1 values per pixel in the output
> aggregated file
>
> Does this make sense?  It is a bit counter-intuitive starting from the
> end, but you should be able to get fairly rapid processing (at the
> cost of increased coding) this way.  If you do follow this technique,
> please follow-up with your actual completed code for the community!
>
> --j
>
> On Sat, Jun 21, 2014 at 11:26 AM, Carlos Carroll
> <klamathconservation@gmail.com> wrote:
> > While mean of calc(y, mean) would allow me to operate on the original
> > stack, and then subsequently aggregate the results, what I need to do is
> > operate on the entire set of values within the aggregation window (x * y
> *
> > nlayers) in one go, because I am deriving a multivariate distance metric
> > (below).
> >
> > multidist <- function(x,...)
> > {
> > footprintsize<-225
> > numvars<-3
> > meandist <- mean(dist(matrix(x,footprintsize,numvars), method =
> > "euclidean"),na.rm=TRUE)
> > return(meandist)
> > }
> >
> >
> >
> > On Sat, Jun 21, 2014 at 4:35 AM, Robert J. Hijmans <r.hijmans@gmail.com>
> > wrote:
> >
> >> Carlos,
> >>
> >> How about:
> >>
> >> x <- mean(y)
> >>
> >> or
> >>
> >> x <- calc(y, mean)
> >>
> >> Robert
> >>
> >>
> >>
> >> On Fri, Jun 20, 2014 at 2:50 PM, Carlos Carroll
> >> <klamathconservation@gmail.com> wrote:
> >> > When I use "aggregate" (package raster) on a multi-layer stack, with a
> >> > function such as "mean", it returns a second multi-layer stack at the
> >> > aggregated resolution. The function is applied separately to values
> from
> >> > each layer in turn.
> >> > What I want to do is send the vector/matrix of values extracted across
> >> all
> >> > layers to the user-defined function, which returns a single value that
> >> > would then go to form the output, a single layer raster or stack.
> >> > I can do this for a focal function using package spatial.tools, e.g.:
> >> >
> >> > v<-rasterEngine(w,fun=mean,window_dims = c(15,15,3))  ## for a 3 band
> >> stack
> >> > with a window size of 15 by 15.
> >> >
> >> > But I just need the value at the aggregate resolution, so running a
> focal
> >> > function takes ~200 times longer than necessary in this case.
> >> > Is it possible to use raster::aggregate or another function to do a
> >> similar
> >> > multi-layer operation?
> >> >
> >> >         [[alternative HTML version deleted]]
> >> >
> >> > _______________________________________________
> >> > R-sig-Geo mailing list
> >> > R-sig-Geo@r-project.org
> >> > https://stat.ethz.ch/mailman/listinfo/r-sig-geo
> >>
> >
> >         [[alternative HTML version deleted]]
> >
> > _______________________________________________
> > R-sig-Geo mailing list
> > R-sig-Geo@r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>
>
>
> --
> Jonathan A. Greenberg, PhD
> Assistant Professor
> Global Environmental Analysis and Remote Sensing (GEARS) Laboratory
> Department of Geography and Geographic Information Science
> University of Illinois at Urbana-Champaign
> 259 Computing Applications Building, MC-150
> 605 East Springfield Avenue
> Champaign, IL  61820-6371
> Phone: 217-300-1924
> http://www.geog.illinois.edu/~jgrn/
> AIM: jgrn307, MSN: jgrn307@hotmail.com, Gchat: jgrn307, Skype: jgrn3007
>

	[[alternative HTML version deleted]]

