In the [simInit()] call, a parameter called `.saveObjects` can be provided in each module. This must be a character string vector of all object names to save. These objects will then be saved whenever a call to `saveFiles` is made.
saveFiles(sim)
A `simList` simulation object.
The file names will be equal to the object name plus `time(sim)` is appended at the end. The files are saved as `.rds` files, meaning, only one object gets saved per file.
For objects saved using this function, the module developer must create save events that schedule a call to `saveFiles`.
If this function is used outside of a module, it will save all files in the outputs(sim) that are scheduled to be saved at the current time in the simList.
There are 3 ways to save objects using `SpaDES`.
It is not possible to schedule separate saving events for each object that is listed in the `.saveObjects`.
Using the `outputs` slot in the [simInit()] call. See example in [simInit()]. This can be convenient because it gives overall control of many modules at a time, and it gets automatically scheduled during the [simInit()] call.
Using the `saveFiles` function inside a module. This must be accompanied by a `.saveObjects` list element in the `params` slot in the [simList()]. Usually a module developer will create this method for future users of their module.
A module developer can save any object at any time inside their module, using standard R functions for saving R objects (e.g., `save` or `saveRDS`). This is the least modular approach, as it will happen whether a module user wants it or not.
if (FALSE) {
if (requireNamespace("SpaDES.tools", quietly = TRUE) &&
requireNamespace("NLMR", quietly = TRUE)) {
#' # This will save the "caribou" object at the save interval of 1 unit of time
# in the outputPath location
outputPath <- file.path(tempdir(), "test_save")
times <- list(start = 0, end = 6, "month")
parameters <- list(
.globals = list(stackName = "landscape"),
caribouMovement = list(
.saveObjects = "caribou",
.saveInitialTime = 1, .saveInterval = 1
),
randomLandscapes = list(.plotInitialTime = NA, nx = 20, ny = 20))
modules <- list("randomLandscapes", "caribouMovement")
paths <- list(
modulePath = system.file("sampleModules", package = "SpaDES.core"),
outputPath = outputPath
)
opts <- options("spades.moduleCodeChecks" = FALSE) # not necessary for example
mySim <- simInit(times = times, params = parameters, modules = modules,
paths = paths)
# The caribou module has a saveFiles(sim) call, so it will save caribou
spades(mySim)
dir(outputPath)
# remove the files
file.remove(dir(outputPath, full.names = TRUE))
options(opts) # clean up
}}