Description Usage Arguments Details Value Author(s) Examples
View source: R/simulationsApply.R
Apply functions to the @values
of Simulations objects or to Raster* objects. Functions can be applied to any margin: value-wise, plume-wise, or location-wise. The results can be summarised by a second function. Processing of the data may be done in blocks, this allows to process data that does not fit into memory. However, this only works if input and output of a single function fit into memory.
1 2 3 4 5 6 7 8 | simulationsApply(simulations,
locations = 1:nLocations(simulations),
plumes = 1:nPlumes(simulations),
kinds = 1:nKinds(simulations),
fun = NA, fun_p = NA, fun_l = NA, fun_pl = NA,
fun_Rp = NA, fun_Rl = NA, fun_Rpl = NA, fun_Rpl_cellStats = NA,
nameSave = "simulationsApply", overwrite = FALSE,
chunksize = 1e+7, keepSubset = FALSE, ...)
|
simulations |
Simulations object or Raster* object |
locations |
indices of locations, i.e. rows of |
plumes |
indices of plumes, i.e. columns of |
kinds |
index or name of the layer of |
fun |
function to be applied to all values of the subset at once, see details |
fun_p |
function to be applied plume-wise, see details |
fun_l |
function to be applied location-wise, see details |
fun_pl |
function to be applied value-wise, see details |
fun_Rp |
function to be applied to the result of |
fun_Rl |
function to be applied to the result of |
fun_Rpl |
function to be applied to the result of |
fun_Rpl_cellStats |
character string of function to be applied to the result of |
nameSave |
filename for the raster file in case the result does not fit into memory; if |
overwrite |
boolean, if the file at |
chunksize |
maximal number of cells to be processed at once – forwarded to |
keepSubset |
boolean, if the subset of the values of |
... |
further parameters to be passed on to called functions |
The defaults for locations
, plumes
and kinds
only work for simulations
of class Simulations. If it is of class raster, the user has to provide these parameters. If plumes
or locations
contain an index several times, these plumes / locations are considered that many times, also order is kept. Invalid indices cause stop with warning.
The functions must have a certain form, else the function stops with a warning:
they need the parameters x
for the input values and nout
, the length of the output (to generate the arrays to hold the results). Several functions to be applied can be specified. However, fun_Rp
, fun_Rl
, and fun_Rpl
make only sense if the functions that generate their input are specified. fun_Rp
and fun_Rl
need the additional parameter weight
, inside of simulationsApply
this parameter is set to the data frames associated with the plumes or locations, respectively: you may refer to names of these data frames inside the functions (default is overwritten); if simulations
is a raster
object, no values are inserted as weight
– the parameter must be given, but unless it has default values you cannot refer to it in the function. fun_Rpl
needs the parameters weight_l
and weight_p
which are replaced by the data frames associated with locations and plumes.
All functions are checked by replaceDefault
automatically with type = "fun.simulationsApply"
; fun_Rp
, fun_Rl
with type = "funR.simulationsApply"
and fun_Rpl
with type = "funRR.simulationsApply"
.
The output of fun
, fun_p
, or fun_l
is supposed to be small enough to keep it in memory; if not, it stops with a warning.
The results of fun_pl
may be too big to keep in memory. If nameSave
is a filename, these data are saved as raster files.
The subset of values (defined by plumes
and locations
) is only kept if it fits into memory.
List of values and arrays (dimensions: references (locations, plumes), output parameters of the function):
"result_global"
: result of fun
"result_plumes"
: result of fun_p
"result_locations"
: result of fun_l
"result_global_plumes"
: result of fun_Rp
"result_global_locations"
: result of fun_Rl
"result_locationsplumes"
: result of fun_pl
; RasterBrick
"result_global_locationsplumes"
: result of fun_Rpl
"result_global_locationsplumes"
: result of fun_Rpl_cellStats
"subset"
: subset of data, according to plumes
and locations
If some function cannot be applied (wrong parameters, input not in memory...), the result of this function is not returned with a warning.
Kristina B. Helle, kristina.helle@uni-muenster.de
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | ## Not run:
## may create files
demo(radioactivePlumes_addProperties)
# number of not detected plumes for given set of 10 sensors,
# weighted by total dose of plumes
sensors = sample.int(nLocations(radioactivePlumes), 10)
nondetection = function(x, threshold = 1e-7, nout = 1){
all(x[,2] < threshold)
}
sumWeighted = function(x, weight, nout = 1){
sum(x * weight$totalDose)
}
weightedSumUndetectedAtSensors = simulationsApply(
simulations = radioactivePlumes,
locations = sensors,
fun_p = nondetection,
fun_Rp = sumWeighted
)
# map of average time until detection of plumes
# if a plume never reaches a location it is counted as being there after a week
meanDetectionTime = function(x, nout = 1){
y = x
y[is.na(x)] = 7 * 86400
z = mean(y, na.rm = TRUE)
}
mapMeanDetectionTime = simulationsApply(
simulations = radioactivePlumes,
kinds = 3,
fun_l = meanDetectionTime
)
radioactivePlumes@locations@data$meanDetectionTime =
mapMeanDetectionTime[["result_locations"]]
spplot(radioactivePlumes@locations, zcol = "meanDetectionTime")
# general ratio and difference of 'maxdose' and 'finaldose'
ratioMaxFinal = function(x, nout = 2){
ratio = x[2]/x[1]
diff = x[2] - x[1]
ratio[!is.finite(ratio)] = NA
out = c(ratio, diff)
}
valuesRatio = simulationsApply(
simulations = radioactivePlumes,
fun_pl = ratioMaxFinal,
fun_Rpl_cellStats = "mean",
nameSave = "ratio"
)
hist(valuesRatio[["result_locationsplumes"]], 1,
xlim = c(0,1), breaks = c(seq(0, 1, 0.01), 10000))
hist(valuesRatio[["result_locationsplumes"]], 2,
xlim = c(-0.001, 0.001), breaks = c(-1000, seq(-0.001, 0.001, 0.0001), 1000))
## End(Not run)
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.