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.




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`.

1. Model-level saving

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.

2. Module-level saving

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.

3. Custom saving

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.


Eliot McIntire

Alex Chubaty


if (FALSE) {

if (requireNamespace("", 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

# remove the files
file.remove(dir(outputPath, full.names = TRUE))
options(opts) # clean up