This is very experimental and has not been thoroughly tested. Use with caution. This function will reparse a single module (currently) into the simList where its source code should reside, and then optionally restart a simulation that stopped on an error, presumably after the developer has modified the source code of the module that caused the break. This will restart the simulation at the next event in the event queue (i.e., returned by events(sim)). Because of this, this function will not do anything if the event queue is empty.

restartSpades(sim = NULL, module = NULL, numEvents = Inf, restart = TRUE, ...)



A simList. If not supplied (the default), this will take the sim from SpaDES.core:::.pkgEnv$.sim, i.e., the one that was interrupted


A character string length one naming the module that caused the error and whose source code was fixed. This module will be reparsed and placed into the simList


Numeric. Default is Inf (i.e., all available). In the simList, if options('spades.recoveryMode') is set to TRUE or a numeric, then there will be a list in the simList called .recoverableObjs. These will be replayed backwards in time to reproduce the initial state of the simList before the event that is numEvents back from the first event in events(sim).


Logical. If TRUE, then the call to spades will be made, i.e., restarting the simulation. If FALSE, then it will return a new simList with the module code parsed into the simList


Passed to spades, e.g., debug, .plotInitialTime


A simList as if spades had been called on a simList.


This will only parse the source code from the named module. It will not affect any objects that are in the mod or sim.

The random number seed will be reset to the state it was at the start of the earliest event recovered, thereby returning to the exact stochastic simulation trajectory.


This will only work reliably if the simList was not modified yet during the event which caused the error. The simList will be in the state it was at the time of the error.


if (FALSE) {
# options("spades.recoveryMode" = 1) # now the default
s <- simInit()
s <- spades(s) # if this is interrupted or fails
# the following line will not work if the previous line didn't fail
s <- restartSpades(s) # don't need to specify `sim` if previous line fails
                     # will take from SpaDES.core:::.pkgEnv$.sim automatically