Description Usage Arguments Details Value Note Author(s) See Also Examples
Given one or more simList objects, run a series of spades calls
in a structured, organized way. Methods are available to deal with outputs,
such as as.data.table.simLists which can pull out simple to complex
values from every resulting simList or object saved by outputs
in every simList run. This uses future internally, allowing
for various backends and parallelism.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | experiment2(
...,
replicates = 1,
clearSimEnv = FALSE,
createUniquePaths = c("outputPath"),
useCache = FALSE,
debug = getOption("spades.debug"),
drive_auth_account
)
## S4 method for signature 'simList'
experiment2(
...,
replicates = 1,
clearSimEnv = FALSE,
createUniquePaths = c("outputPath"),
useCache = FALSE,
debug = getOption("spades.debug"),
drive_auth_account = NULL
)
|
... |
One or more |
replicates |
The number of replicates to run of the same |
clearSimEnv |
Logical. If TRUE, then the envir(sim) of each simList in the return list is emptied. This is to reduce RAM load of large return object. Default FALSE. |
createUniquePaths |
A character vector of the |
useCache |
Logical. Passed to |
debug |
Optional logical flag or character vector indicating what to print to
console at each event. See details.
Default is to use the value in |
drive_auth_account |
Optional character string. If provided, it will be passed
to each worker and run as |
This function, because of its class formalism, allows for methods to be used. For example,
as.data.table.simLists allows user to pull out specific objects (in
the simList objects or on disk saved in outputPath(sim)).
The outputPath is changed so that every simulation puts outputs in a
sub-directory
of the original outputPath of each simList.
Invisibly returns a simLists object. This class
extends the environment class and
contains simList objects.
A simLists object can be made manually, if, say, many manual spades calls
have already been run. See example, via new("simLists")
Eliot McIntire
as.data.table.simLists,
simInit, spades, experiment
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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | ## Not run:
library(SpaDES.core)
tmpdir <- file.path(tempdir(), "examples")
# Make 3 simLists -- set up scenarios
endTime <- 2
# Example of changing parameter values
# Make 3 simLists with some differences between them
mySim <- lapply(c(10, 20, 30), function(nFires) {
simInit(
times = list(start = 0.0, end = endTime, timeunit = "year"),
params = list(
.globals = list(stackName = "landscape", burnStats = "nPixelsBurned"),
# Turn off interactive plotting
fireSpread = list(.plotInitialTime = NA, spreadprob = c(0.2), nFires = c(10)),
caribouMovement = list(.plotInitialTime = NA),
randomLandscapes = list(.plotInitialTime = NA, .useCache = "init")
),
modules = list("randomLandscapes", "fireSpread", "caribouMovement"),
paths = list(modulePath = system.file("sampleModules", package = "SpaDES.core"),
outputPath = tmpdir),
# Save final state of landscape and caribou
outputs = data.frame(
objectName = c(rep("landscape", endTime), "caribou", "caribou"),
saveTimes = c(seq_len(endTime), unique(c(ceiling(endTime / 2), endTime))),
stringsAsFactors = FALSE
)
)
})
planTypes <- c("sequential") # try others! ?future::plan
sims <- experiment2(sim1 = mySim[[1]], sim2 = mySim[[2]], sim3 = mySim[[3]],
replicates = 3)
# Try pulling out values from simulation experiments
# 2 variables
df1 <- as.data.table(sims, vals = c("nPixelsBurned", NCaribou = quote(length(caribou$x1))))
# Now use objects that were saved to disk at different times during spades call
df1 <- as.data.table(sims,
vals = c("nPixelsBurned", NCaribou = quote(length(caribou$x1))),
objectsFromOutputs = list(nPixelsBurned = NA, NCaribou = "caribou"))
# now calculate 4 different values, some from data saved at different times
# Define new function -- this calculates perimeter to area ratio
fn <- quote({
landscape$Fires[landscape$Fires[] == 0] <- NA;
a <- boundaries(landscape$Fires, type = "inner");
a[landscape$Fires[] > 0 & a[] == 1] <- landscape$Fires[landscape$Fires[] > 0 & a[] == 1];
peri <- table(a[]);
area <- table(landscape$Fires[]);
keep <- match(names(area),names(peri));
mean(peri[keep]/area)
})
df1 <- as.data.table(sims,
vals = c("nPixelsBurned",
perimToArea = fn,
meanFireSize = quote(mean(table(landscape$Fires[])[-1])),
caribouPerHaFire = quote({
NROW(caribou) /
mean(table(landscape$Fires[])[-1])
})),
objectsFromOutputs = list(NA, c("landscape"), c("landscape"),
c("landscape", "caribou")),
objectsFromSim = "nPixelsBurned")
if (interactive()) {
# with an unevaluated string
library(ggplot2)
p <- lapply(unique(df1$vals), function(var) {
ggplot(df1[vals == var,],
aes(x = saveTime, y = value, group = simList, color = simList)) +
stat_summary(geom = "point", fun.y = mean) +
stat_summary(geom = "line", fun.y = mean) +
stat_summary(geom = "errorbar", fun.data = mean_se, width = 0.2) +
ylab(var)
})
# Arrange all 4 -- could use gridExtra::grid.arrange -- easier
pushViewport(viewport(layout = grid.layout(2, 2)))
vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y)
print(p[[1]], vp = vplayout(1, 1))
print(p[[2]], vp = vplayout(1, 2))
print(p[[3]], vp = vplayout(2, 1))
print(p[[4]], vp = vplayout(2, 2))
}
## End(Not run)
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.