#' Aggregate to a lower resolution
#'
#' @param s Input RasterStack.
#' @param factor Aggregation factor.
#' @param mem_share Share of memory to be used
#' @param n_cores Number of cores used for parallel processing. Default is NULL, indicating no parallelization.
#' @param aggtype Type of aggregation. See ?VeloxRaster_aggregate
#' @param mem_of_total Is 'mem_share' specified as share of total memory (instead of currently available)?
#'
#' @return RasterStack
#' @export
#
vx_aggregate <- function(s, factor, mem_share = .5, n_cores = NULL, aggtype = "mean", mem_of_total = FALSE){
# split into memory-safe chunks
raster_chunk_list <- split_layers(s, mem_share, mem_of_total)
# process one chunk after the other
# use parallel processing if specified
out_list <- lapply(raster_chunk_list, function(r_chunk){
if(!is.null(n_cores)) {
cl <- parallel::makeCluster(n_cores)
r_list <- parallel::parLapply(cl,
raster::unstack(r_chunk),
varlist = c("factor", "aggtype"),
fun = function(ri) {
vx <- velox::velox(ri)
vx$aggregate(factor = factor, aggtype = aggtype)
vx$as.RasterStack()
})
out_chunk <- raster::stack(r_list)
parallel::stopCluster(cl)
} else {
vx <- velox::velox(r_chunk)
vx$aggregate(factor = factor, aggtype = aggtype)
out_chunk <- vx$as.RasterStack()
}
out_chunk
})
out <- raster::stack(out_list)
out
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.