Title: | A Raster Where Cells are Generic Objects |
---|---|
Description: | A S4 class has been created such that complex operations can be executed on each cell of a raster map. The raster of objects contains a raster map with the addition of a list of generic objects: one object for each raster cells. It allows to write few lines of R code for complex map algebra. Two environmental applications about frequency analysis of raster map of precipitation and creation of a raster map of soil water retention curves have been presented. |
Authors: | Emanuele Cordano [aut, cre] |
Maintainer: | Emanuele Cordano <[email protected]> |
License: | GPL (>= 3) |
Version: | 0.5.20 |
Built: | 2024-11-09 03:38:19 UTC |
Source: | https://github.com/ecor/rasterlist |
Crop
methods for a RasterList-class
object.Crop
methods for a RasterList-class
object.
## S4 method for signature 'RasterList' crop(x, y, check.RasterList = TRUE, ...)
## S4 method for signature 'RasterList' crop(x, y, check.RasterList = TRUE, ...)
x |
a valid object |
y |
a Spatial Object or an Extent |
check.RasterList |
logical value. If it is |
... |
further arguments |
a "cropped" RasterList-class
object
precf <- system.file("map/Mekrou_precipitation.grd", package="rasterList") prec <- stack(precf) ## Sample L-moments if (requireNamespace("lmom",quietly = TRUE)) { library(lmom) samlmom <- stack(rasterList(prec,FUN=samlmu)) ## Fitting a Random Probability Distribution: it is a 'rasterList' Object fitdist <- rasterList(samlmom,FUN=pelgam) ##### ZOOM IN ## set a mask mask <-raster( extent(fitdist)/4 ) fitdist_masked <- crop ( x = fitdist,y=mask) }
precf <- system.file("map/Mekrou_precipitation.grd", package="rasterList") prec <- stack(precf) ## Sample L-moments if (requireNamespace("lmom",quietly = TRUE)) { library(lmom) samlmom <- stack(rasterList(prec,FUN=samlmu)) ## Fitting a Random Probability Distribution: it is a 'rasterList' Object fitdist <- rasterList(samlmom,FUN=pelgam) ##### ZOOM IN ## set a mask mask <-raster( extent(fitdist)/4 ) fitdist_masked <- crop ( x = fitdist,y=mask) }
RasterList-class
object ?Is a RasterList-class
object ?
is.RasterList(x)
is.RasterList(x)
x |
a valid object |
a logical variable
r <- rasterList() is.RasterList(r) rr <- raster() is.RasterList(rr) f <- system.file("external/test.grd", package="raster") ra <- rasterList(f) is.RasterList(rr)
r <- rasterList() is.RasterList(r) rr <- raster() is.RasterList(rr) f <- system.file("external/test.grd", package="raster") ra <- rasterList(f) is.RasterList(rr)
Raster
methods for a RasterList-class
object.Raster
methods for a RasterList-class
object.
## S4 method for signature 'RasterList' raster(x, FUN = NULL, ...)
## S4 method for signature 'RasterList' raster(x, FUN = NULL, ...)
x |
a valid |
FUN |
if it not |
... |
further arguments |
a RasterLayer-class
object
f <- system.file("external/test.grd", package="raster") ur <- rasterList(raster(f),FUN=function(x,d){x+0:d},d=10) r1 <- raster(ur) r2 <- raster(ur,FUN=function(x){x[2]})
f <- system.file("external/test.grd", package="raster") ur <- rasterList(raster(f),FUN=function(x,d){x+0:d},d=10) r1 <- raster(ur) r2 <- raster(ur,FUN=function(x){x[2]})
RasterList-class
objectThe method rasterList
is the constructor of a RasterList-class
from a generic object
.
rasterList(object = NULL, list = NULL, object.name = NA, ...) as.RasterList(object, ...) rasterList(object = NULL, list = NULL, object.name = NA, ...) ## S4 method for signature 'RasterLayer' rasterList(object = NULL, list = NULL, object.name = NA, ...) ## S4 method for signature 'RasterStack' rasterList(object = NULL, list = NULL, object.name = NA, ...) ## S4 method for signature 'RasterBrick' rasterList(object = NULL, list = NULL, object.name = NA, ...) ## S4 method for signature 'RasterList' rasterList(object, list = NULL, object.name = NA, FUN = NULL, ...)
rasterList(object = NULL, list = NULL, object.name = NA, ...) as.RasterList(object, ...) rasterList(object = NULL, list = NULL, object.name = NA, ...) ## S4 method for signature 'RasterLayer' rasterList(object = NULL, list = NULL, object.name = NA, ...) ## S4 method for signature 'RasterStack' rasterList(object = NULL, list = NULL, object.name = NA, ...) ## S4 method for signature 'RasterBrick' rasterList(object = NULL, list = NULL, object.name = NA, ...) ## S4 method for signature 'RasterList' rasterList(object, list = NULL, object.name = NA, FUN = NULL, ...)
object |
the object to coerce |
list |
a |
object.name |
character string containing the name to assign to |
... |
further arguments for |
FUN |
function that can be used to apply to each element of the list in a |
The argument FUN
is useful to create or transform RasterList-class
from other Raster* classes.
a RasterList-class
object.
f <- system.file("external/test.grd", package="raster") rr <- rasterList(f) rs <- as.RasterList(f) # The package-provided datasets shall be only used as example datasets. precf <- system.file("map/precipitation.grd", package="rasterList")## ## A resampled preciptation raster map based on CHIRS dataset: ## Funk, Chris, Pete Peterson, Martin Landsfeld, Diego Pedreros, James Verdin, ## Shraddhanand Shukla, Gregory Husak, James Rowland, Laura Harrison, ## Andrew Hoell and Joel Michaelsen. ## "The climate hazards infrared precipitation with stations - a new environmental ## record for monitoring extremes". Scientific Data 2, 150066. doi:10.1038/sdata.2015.66 2015. ## http://chg.geog.ucsb.edu/data/chirps/ ## ## Not run: if (requireNamespace("lmom",quietly = TRUE) & requireNamespace("lubridate",quietly = TRUE)) { ## Sample L-moments library(lmom) library(lubridate) prec <- stack(precf) samlmom <- stack(rasterList(prec,FUN=samlmu)) ## Fitting a Random Probability Distribution: it is a 'rasterList' Object fitdist <- rasterList(samlmom,FUN=pelgam) } ## End(Not run) if (requireNamespace("lmom",quietly = TRUE) & requireNamespace("lubridate",quietly = TRUE)) { library(lmom) library(lubridate) precf <- system.file("map/Mekrou_precipitation.grd", package="rasterList") prec <- stack(precf) # Set time time <- as.Date(names(prec),format="X%Y.%m.%d") year <- sprintf("X%04d",lubridate::year(time)) ##as.character(time,format="X%Y") ## Compute Annual Precipitation (sum aggregration) yearlyprec <- stackApply(x=prec,fun=sum,indices=year) ## L-moments samlmom <- stack(rasterList(yearlyprec,FUN=samlmu)) fitdist <- rasterList(samlmom,FUN=pelgam) }
f <- system.file("external/test.grd", package="raster") rr <- rasterList(f) rs <- as.RasterList(f) # The package-provided datasets shall be only used as example datasets. precf <- system.file("map/precipitation.grd", package="rasterList")## ## A resampled preciptation raster map based on CHIRS dataset: ## Funk, Chris, Pete Peterson, Martin Landsfeld, Diego Pedreros, James Verdin, ## Shraddhanand Shukla, Gregory Husak, James Rowland, Laura Harrison, ## Andrew Hoell and Joel Michaelsen. ## "The climate hazards infrared precipitation with stations - a new environmental ## record for monitoring extremes". Scientific Data 2, 150066. doi:10.1038/sdata.2015.66 2015. ## http://chg.geog.ucsb.edu/data/chirps/ ## ## Not run: if (requireNamespace("lmom",quietly = TRUE) & requireNamespace("lubridate",quietly = TRUE)) { ## Sample L-moments library(lmom) library(lubridate) prec <- stack(precf) samlmom <- stack(rasterList(prec,FUN=samlmu)) ## Fitting a Random Probability Distribution: it is a 'rasterList' Object fitdist <- rasterList(samlmom,FUN=pelgam) } ## End(Not run) if (requireNamespace("lmom",quietly = TRUE) & requireNamespace("lubridate",quietly = TRUE)) { library(lmom) library(lubridate) precf <- system.file("map/Mekrou_precipitation.grd", package="rasterList") prec <- stack(precf) # Set time time <- as.Date(names(prec),format="X%Y.%m.%d") year <- sprintf("X%04d",lubridate::year(time)) ##as.character(time,format="X%Y") ## Compute Annual Precipitation (sum aggregration) yearlyprec <- stackApply(x=prec,fun=sum,indices=year) ## L-moments samlmom <- stack(rasterList(yearlyprec,FUN=samlmu)) fitdist <- rasterList(samlmom,FUN=pelgam) }
Class RasterList
It contains RasterLayer-class
with the following adjoint slots:
list
:a list of generic object whese length corresponds to the number of cells. Each list
element for each cell;
name
:an identification name of the object. Default is NA
.
This class inherits the RasterLayer-class
class considering each pixel of the raster is a generic object.
Emanuele Cordano
showClass("RasterList")
showClass("RasterList")
The aim of this package is to develop a way to make some complex operations on each
cells of a Raster Maps. Generally raster contains numeric values in each cells and in each band.
Sometimes complex operation required the definition of particular object, in case such operation should be executed
for each cell of a raster map, it becomes challanging. Then RasterList-package
makes these operations
easy to be implented with few lines of codes.
The RasterList-class
is a S4 class that inherits the RasterLayer-class
and it an added slot called list
. The list
slot is a list
object of so many elements how many are the cells of the inherited RasterLayer-class
class,
so that there is bijective corrensponce between a raster cell and a list element.
The RasterList package provides three categories of important functions:
rasterList
: it is the constructor of a RasterList-class
object from a generic object
, it also transforms a RasterList-class
into another one throungh a function argument.
rasterListFun
: it is a function that constructs a particular RasterList-class
object in which the objects are function
-type.
RasterListApply
: it is a function that allows to operate among two or more RasterList-class
objects defined in the same spatial extent through a generic function fun(x,y,...)
where x
and y
are each cell/element of two RasterList-class
objects given as arguments x
and y
of RasterListApply
.
Some examples, concerning the fitting of a probability function for each cell of a stack (RasterStack-class
object) of precipitation time-series or the estimation of soil water retention curve for each cell of a raster map, are shown throughout the package manual.
The precipitation example dataset in raster format were extracted by the CHIRPS database:
Funk, Chris, Pete Peterson, Martin Landsfeld, Diego Pedreros, James Verdin, Shraddhanand Shukla, Gregory Husak, James Rowland, Laura Harrison, Andrew Hoell and Joel Michaelsen. "The climate hazards infrared precipitation with stations - a new environmental record for monitoring extremes". Scientific Data 2, 150066. doi:10.1038/sdata.2015.66 2015 , https://chc.ucsb.edu/data/chirps.
The package-provided datasets shall be only used as example datasets.
The development of this package has been sponosored by ACEWATER2 and "Water for Growth and Poverty Reduction in the Mekrou" projects of the Joint Research Centre of the Europan Commission (http://aquaknow.jrc.ec.europa.eu).
RasterList-class
objects.A function for operations among RasterList-class
objects.
RasterListApply(..., FUN = NULL)
RasterListApply(..., FUN = NULL)
... |
a set of arguments containg the |
FUN |
a function |
a RasterList-class
object
f <- system.file("external/test.grd", package="raster") ra <- rasterList(f) rb <- rasterList(f) rm <- RasterListApply(x=ra,y=rb,z=10,FUN=function(x,y,z){x+y+z}) ### Fitting a probability distribution for precipitation ### in each cell with "lmon" package (L Moments) if (requireNamespace("lmom",quietly = TRUE)) { library(lmom) # The package-provided datasets shall be only used as example datasets. precf <- system.file("map/Mekrou_precipitation.grd", package="rasterList") ## ## A resampled preciptation raster map based on CHIRS dataset: ## Funk, Chris, Pete Peterson, Martin Landsfeld, Diego Pedreros, James Verdin, ## Shraddhanand Shukla, Gregory Husak, James Rowland, Laura Harrison, ## Andrew Hoell and Joel Michaelsen. ## "The climate hazards infrared precipitation with stations -a new environmental ## record for monitoring extremes". Scientific Data 2, 150066. doi:10.1038/sdata.2015.66 2015. ## http://chg.geog.ucsb.edu/data/chirps/ ## prec <- stack(precf) ## Sample L-moments samlmom <- stack(rasterList(prec,FUN=samlmu)) ## Fitting a Random Probability Distribution: it is a 'rasterList' Object fitdist <- rasterList(samlmom,FUN=pelgam) ## KS TESTING kstesting <- RasterListApply(x=rasterList(prec),y="cdfgam",para=fitdist,FUN=ks.test) ## Mapping of p-value pval_ks <- raster(kstesting,FUN=function(x){x$p.value}) }
f <- system.file("external/test.grd", package="raster") ra <- rasterList(f) rb <- rasterList(f) rm <- RasterListApply(x=ra,y=rb,z=10,FUN=function(x,y,z){x+y+z}) ### Fitting a probability distribution for precipitation ### in each cell with "lmon" package (L Moments) if (requireNamespace("lmom",quietly = TRUE)) { library(lmom) # The package-provided datasets shall be only used as example datasets. precf <- system.file("map/Mekrou_precipitation.grd", package="rasterList") ## ## A resampled preciptation raster map based on CHIRS dataset: ## Funk, Chris, Pete Peterson, Martin Landsfeld, Diego Pedreros, James Verdin, ## Shraddhanand Shukla, Gregory Husak, James Rowland, Laura Harrison, ## Andrew Hoell and Joel Michaelsen. ## "The climate hazards infrared precipitation with stations -a new environmental ## record for monitoring extremes". Scientific Data 2, 150066. doi:10.1038/sdata.2015.66 2015. ## http://chg.geog.ucsb.edu/data/chirps/ ## prec <- stack(precf) ## Sample L-moments samlmom <- stack(rasterList(prec,FUN=samlmu)) ## Fitting a Random Probability Distribution: it is a 'rasterList' Object fitdist <- rasterList(samlmom,FUN=pelgam) ## KS TESTING kstesting <- RasterListApply(x=rasterList(prec),y="cdfgam",para=fitdist,FUN=ks.test) ## Mapping of p-value pval_ks <- raster(kstesting,FUN=function(x){x$p.value}) }
RasterList
This fuction transmors a generic RasterList-class
object into another RasterList-class
object where elemets are all function
-type.
rasterListFun(object)
rasterListFun(object)
object |
an object to be coerced to |
This function works with RasterList-class
objects in which all elements of object@list
slot are functions. It returns a "global" function that works at "raster" scale. The returned function will have the following usage signature: fun(xval,...)
where one xval
(if its lengths is different from 1) element is the applied to each element and ... are further common arguments.
library(sp) library(rasterList) library(soilwater) set.seed(1234) data(meuse.grid) data(meuse) coordinates(meuse.grid) <- ~x+y coordinates(meuse) <- ~x+y gridded(meuse.grid) <- TRUE soilmap <- stack(meuse.grid)[['soil']] elevmap <- rasterize(x=meuse,y=soilmap,field="elev",fun=mean) soilparcsv <- system.file("external/soil_data.csv",package="soilwater") soilpar <- read.table(soilparcsv,stringsAsFactors=FALSE,header=TRUE,sep=",") ## From help(meuse,help_type="html") ##soil type according to the 1:50 000 soil map of the Netherlands. ## 1 = Rd10A (Calcareous weakly-developed meadow soils, light sandy clay); ## 2 = Rd90C/VII (Non-calcareous weakly-developed meadow soils, heavy sandy clay to light clay); ## 3 = Bkd26/VII (Red Brick soil, fine-sandy, silty light clay) soiltype_id <- c(1,2,3) soiltype_name <- c("sandy clay","sandy clay","silty clay loam") meuse.soilrasterlist <- rasterList(soilmap,FUN=function(i,soiltype_name,soilpar){ o <- NULL if (!is.na(i)) { ii <- which(soilpar$type==soiltype_name[i]) o <- soilpar[ii,] type <- o[["type"]] o <- o[names(o)!="type"] o <- o[names(o)!="Ks_m_per_hour"] names(o)[names(o)=="Ks_m_per_sec"] <- "ks" names(o)[names(o)=="swc"] <- "theta_sat" names(o)[names(o)=="rwc"] <- "theta_res" attr(o,"type") <- type ## add noise noise <- rnorm(length(o)) o <- o*(1+0.005*noise) o["m"] <- 1-1/o["n"] } else { o <- soilpar[which(soilpar$type==soiltype_name[1]),] type <- o[["type"]] o <- o[names(o)!="type"] o <- o[names(o)!="Ks_m_per_hour"] names(o)[names(o)=="Ks_m_per_sec"] <- "ks" names(o)[names(o)=="swc"] <- "theta_sat" names(o)[names(o)=="rwc"] <- "theta_res" o[] <- NA } return(o) },soiltype_name=soiltype_name,soilpar=soilpar) meuse.swclist <- rasterList(meuse.soilrasterlist,FUN=function(x) { o <- NA ## swc rwc alpha n m ks ## 9 0.4295507 0.1093227 3.39387 1.39617 0.2837546 2.018317e-07 o <- function(psi,...,func="swc"){ args <- c(list(psi=psi,...),as.list(x)) oo <- do.call(args=args,what=get(func)) return(oo) } return(o) }) ### RasterList with soil water retenction curves (One for each cell!) swcfunr <- rasterListFun(meuse.swclist) ## RasterLayer of soil water content assuming a uniformly distrrubted pressure head psi <- -0.9 soil_water_content <- raster(swcfunr(psi)) plot(soil_water_content) ## RasterLayer of soil water content from a generic map of soil water pressure head psi <- 0.2-(elevmap-(5)) psi[] <- -0.9+0.1*rnorm(ncell(psi[])) ## Alternatively to the values of the previous line! soil_water_content <- raster(swcfunr(psi)) plot(soil_water_content) ## END
library(sp) library(rasterList) library(soilwater) set.seed(1234) data(meuse.grid) data(meuse) coordinates(meuse.grid) <- ~x+y coordinates(meuse) <- ~x+y gridded(meuse.grid) <- TRUE soilmap <- stack(meuse.grid)[['soil']] elevmap <- rasterize(x=meuse,y=soilmap,field="elev",fun=mean) soilparcsv <- system.file("external/soil_data.csv",package="soilwater") soilpar <- read.table(soilparcsv,stringsAsFactors=FALSE,header=TRUE,sep=",") ## From help(meuse,help_type="html") ##soil type according to the 1:50 000 soil map of the Netherlands. ## 1 = Rd10A (Calcareous weakly-developed meadow soils, light sandy clay); ## 2 = Rd90C/VII (Non-calcareous weakly-developed meadow soils, heavy sandy clay to light clay); ## 3 = Bkd26/VII (Red Brick soil, fine-sandy, silty light clay) soiltype_id <- c(1,2,3) soiltype_name <- c("sandy clay","sandy clay","silty clay loam") meuse.soilrasterlist <- rasterList(soilmap,FUN=function(i,soiltype_name,soilpar){ o <- NULL if (!is.na(i)) { ii <- which(soilpar$type==soiltype_name[i]) o <- soilpar[ii,] type <- o[["type"]] o <- o[names(o)!="type"] o <- o[names(o)!="Ks_m_per_hour"] names(o)[names(o)=="Ks_m_per_sec"] <- "ks" names(o)[names(o)=="swc"] <- "theta_sat" names(o)[names(o)=="rwc"] <- "theta_res" attr(o,"type") <- type ## add noise noise <- rnorm(length(o)) o <- o*(1+0.005*noise) o["m"] <- 1-1/o["n"] } else { o <- soilpar[which(soilpar$type==soiltype_name[1]),] type <- o[["type"]] o <- o[names(o)!="type"] o <- o[names(o)!="Ks_m_per_hour"] names(o)[names(o)=="Ks_m_per_sec"] <- "ks" names(o)[names(o)=="swc"] <- "theta_sat" names(o)[names(o)=="rwc"] <- "theta_res" o[] <- NA } return(o) },soiltype_name=soiltype_name,soilpar=soilpar) meuse.swclist <- rasterList(meuse.soilrasterlist,FUN=function(x) { o <- NA ## swc rwc alpha n m ks ## 9 0.4295507 0.1093227 3.39387 1.39617 0.2837546 2.018317e-07 o <- function(psi,...,func="swc"){ args <- c(list(psi=psi,...),as.list(x)) oo <- do.call(args=args,what=get(func)) return(oo) } return(o) }) ### RasterList with soil water retenction curves (One for each cell!) swcfunr <- rasterListFun(meuse.swclist) ## RasterLayer of soil water content assuming a uniformly distrrubted pressure head psi <- -0.9 soil_water_content <- raster(swcfunr(psi)) plot(soil_water_content) ## RasterLayer of soil water content from a generic map of soil water pressure head psi <- 0.2-(elevmap-(5)) psi[] <- -0.9+0.1*rnorm(ncell(psi[])) ## Alternatively to the values of the previous line! soil_water_content <- raster(swcfunr(psi)) plot(soil_water_content) ## END
RasterStack-class
object from a RasterList-class
The method transforms a RasterList-class
into a RasterStack-class
in case of the list elements are numeric vectors.
## S4 method for signature 'RasterList' stack(x, ...)
## S4 method for signature 'RasterList' stack(x, ...)
x |
a |
... |
further arguments for |
a RasterStack-class
object
f <- system.file("external/test.grd", package="raster") ## Creates a simple generic RasterList rl <- rasterList(f) list <- as.list(as.vector(rl)) list <- lapply(X=list,FUN=function (x) {c(x,x+10,x+15)}) rl <- rasterList(rl,list=list,object.name="test") ss <- stack(rl) il <- 8331 list[[il]] <- numeric(0) rla <- rasterList(rl,list=list,object.name="test2") sa <- stack(rla)
f <- system.file("external/test.grd", package="raster") ## Creates a simple generic RasterList rl <- rasterList(f) list <- as.list(as.vector(rl)) list <- lapply(X=list,FUN=function (x) {c(x,x+10,x+15)}) rl <- rasterList(rl,list=list,object.name="test") ss <- stack(rl) il <- 8331 list[[il]] <- numeric(0) rla <- rasterList(rl,list=list,object.name="test2") sa <- stack(rla)