vignettes/ii-modules.R

## ----setup, include=FALSE-----------------------------------------------------
SuggestedPkgsNeeded <- c("DiagrammeR", "NLMR", "SpaDES.tools", "knitr", "CircStats")
hasSuggests <- all(sapply(SuggestedPkgsNeeded, require, character.only = TRUE, quietly = TRUE))
useSuggests <- !(tolower(Sys.getenv("_R_CHECK_DEPENDS_ONLY_")) == "true")

knitr::opts_chunk$set(eval = hasSuggests && useSuggests)

options("spades.moduleCodeChecks" = FALSE,
        "spades.useRequire" = FALSE)


## ----module-metadata, echo=FALSE, results="asis"------------------------------
#  cat(c(
#    "```",
#    "## sample module metadata for the default `caribouMovement` module",
#    readLines(system.file("sampleModules", "caribouMovement", "caribouMovement.R", package = "SpaDES.core"))[10:45],
#    "```"
#    ), sep = "\n")

## ----passing-params, echo=TRUE------------------------------------------------
#    library(SpaDES.core)
#  
#  outputDir <- file.path(tempdir(), "simOutputs")
#  times <- list(start = 0.0, end = 5.0)
#  parameters <- list(
#    .globals = list(stackName = "landscape", burnStats = "nPixelsBurned"),
#    .progress = list(NA),
#    randomLandscapes = list(nx = 100L, ny = 100L, inRAM = TRUE),
#    fireSpread = list(
#      nFires = 10L, spreadprob = 0.225, its = 1e6, persistprob = 0,
#      returnInterval = 10, startTime = 0,
#      .plotInitialTime = 0, .plotInterval = 10
#    ),
#    caribouMovement = list(
#      N = 100L, moveInterval = 1, torus = TRUE,
#      .plotInitialTime = 1, .plotInterval = 1
#    )
#  )
#  modules <- list("randomLandscapes", "fireSpread", "caribouMovement")
#  objects <- list()
#  paths <- list(modulePath = getSampleModules(tempdir()),
#                outputPath = outputDir)
#  
#  mySim <- simInit(times = times, params = parameters, modules = modules,
#                   objects = objects, paths = paths)

## ----accessing-params, eval=FALSE, echo=TRUE----------------------------------
#  ## Access parameters
#  P(mySim)                    # shows all parameters
#  P(mySim, module = "caribouMovement") # only parameters in caribouMovement module
#  P(mySim)$caribouMovement    # same
#  P(mySim)$caribouMovement$N  # Only one parameter
#  
#  ## If used within the module source code, then module name can be omitted:
#  ## This will return NULL here, but will return the actual value if used
#  ## in a module
#  P(mySim)$N  # Only one parameter if used within a module

## ----event-types, echo=FALSE, results="asis"----------------------------------
#  cat(c(
#    "```",
#    "## sample event type definitions for the default `caribouMovement` module",
#    readLines(system.file("sampleModules", "caribouMovement", "caribouMovement.R", package = "SpaDES.core"))[61:116],
#    "```"
#    ), sep = "\n")

## ----event-functions, echo=FALSE, results="asis"------------------------------
#  cat(c(
#    "```",
#    "## sample Init event function from the default `caribouMovement` module",
#    readLines(system.file("sampleModules", "caribouMovement", "caribouMovement.R", package = "SpaDES.core"))[121:143],
#    "```"
#    ), sep = "\n")

## ----sim-eventDiagram, eval=hasSuggests, echo=FALSE, message=FALSE, warning=FALSE----
#  library(SpaDES.core)
#  
#  parameters <- list(
#    .globals = list(stackName = "landscape", burnStats = "nPixelsBurned"),
#    .progress = list(NA),
#    randomLandscapes = list(nx = 100L, ny = 100L, inRAM = TRUE),
#    fireSpread = list(nFires = 10L, spreadprob = 0.225, its = 1e6,
#                      persistprob = 0, returnInterval = 1, startTime = 0,
#                      .plotInitialTime = 0, .plotInterval = 10),
#    caribouMovement = list(N = 100L, moveInterval = 1, torus = TRUE,
#                           .plotInitialTime = 1, .plotInterval = 1)
#  )
#  
#  ftmp <- tempfile("spades_vignetteOutputs", fileext = ".pdf")
#  pdf(ftmp)
#  clearPlot()
#  
#  # run just 1 year for vignette
#  mySim <- simInitAndSpades(
#    times = list(start = 0.0, end = 1.0, timeunit = "year"),
#    params = parameters,
#    modules = list("randomLandscapes", "fireSpread", "caribouMovement"),
#    objects = list(),
#    paths = list(modulePath = getSampleModules(tempdir()))
#  )
#  dev.off()
#  unlink(normalizePath(ftmp))

## ----eventDiagram, echo=FALSE, eval=hasSuggests, fig.height=10, fig.width=7----
#  # overview of the events in the simulation
#  # Needs DiagrammeR package
#  eventDiagram(mySim, "0000-06-01", n = 200, width = 720)

## ----checksums, eval=FALSE----------------------------------------------------
#  ## 1. specify your module here
#  moduleName <- "my_module"
#  
#  ## 2. use a temp dir to ensure all modules get fresh copies of the data
#  tmpdir <- file.path(tempdir(), "SpaDES_modules")
#  
#  ## 3. download your module's data to the temp dir
#  downloadData(moduleName, tmpdir)
#  
#  ## 4. initialize a dummy simulation to ensure any 'data prep' steps in the .inputObjects section are run
#  simInit(modules = moduleName)
#  
#  ## 5. recalculate your checksums and overwrite the file
#  checksums(moduleName, tmpdir, write = TRUE)
#  
#  ## 6. copy the new checksums file to your working module directory (the one not in the temp dir)
#  file.copy(from = file.path(tmpdir, moduleName, 'data', 'CHECKSUMS.txt'),
#            to = file.path('path/to/my/moduleDir', moduleName, 'data', 'CHECKSUMS.txt'),
#            overwrite = TRUE)

## ----module-object-diagrams, echo=TRUE, message=FALSE, fig.width=7------------
#  ## NOTE: Suggested packages SpaDES.tools and NLMR packages must be installed
#  #install.packages("SpaDES.taols")
#  #install.packages("NLMR", repos = "https://predictiveecology.r-universe.dev/")
#  
#  library(SpaDES.core)
#  
#  times <- list(start = 0.0, end = 1.0)
#  parameters <- list(
#    .globals = list(stackName = "landscape", burnStats = "nPixelsBurned")
#  )
#  modules <- list("SpaDES_sampleModules")
#  paths <- list(modulePath = getSampleModules(tempdir()))
#  
#  mySim <- simInit(times = times, params = parameters, modules = modules, paths = paths)
#  
#  ## examine simulation module (object) dependencies
#  depsEdgeList(mySim, FALSE)      # all object dependency relationships
#  clearPlot()
#  moduleDiagram(mySim)            # simplified visual representation of modules
#  
#  clearPlot()
#  moduleDiagram(mySim, showParents = TRUE) # similar, but showing parent module grouping
#  
#  # detailed visual representation of objects
#  objectDiagram(mySim, width = 720)

## ----checkpoints, echo=TRUE, message=FALSE------------------------------------
#  # initialize a new simulation, setting the checkpoint interval and filename.
#  times <- list(start = 0, end = 5)
#  parameters <- list(
#    .globals = list(stackName = "landscape"),
#    .checkpoint = list(interval = 2, file = "chkpnt.RData")
#  )
#  modules <- list("randomLandscapes", "caribouMovement")
#  paths <- list(
#    modulePath = getSampleModules(tempdir())
#  )
#  
#  mySim <- simInit(times = times, params = parameters, modules = modules, paths = paths)
#  
#  # retrieve the checkpoint params from the simulation object
#  checkpointFile(mySim)
#  checkpointInterval(mySim)

## ----progress, echo=TRUE, message=FALSE---------------------------------------
#  # initialize a new simulation, setting the progress parameters
#  mySim <- simInit(times = list(start = 0.0, end = 10.0),
#                   params = list(.globals = list(stackName = "landscape"),
#                                 .progress = list(type = "text", interval = 1)),
#                   modules = list("randomLandscapes"),
#                   paths = list(modulePath = getSampleModules(tempdir())))
#  
#  # retrieve the checkpoint params from the simulation object
#  progressType(mySim)
#  progressInterval(mySim)

## ----load-save, echo=TRUE, message=FALSE--------------------------------------
#  # initialize a new simulation, setting the load and save parameters
#  outputDir <- file.path(tempdir(), "simOutputs")
#  mySim <- simInit(times = list(start = 0, end = 5),
#                   params = list(
#                     .globals = list(stackName = "landscape"),
#                     randomLandscapes = list(
#                       .saveInitialTime = 0, .saveInterval = 2,
#                       .saveObjects = c("landscape"),
#                       .savePath = file.path(outputDir, "randomLandscapes"))
#                     ),
#                   modules = list("randomLandscapes"),
#                   paths = list(modulePath = getSampleModules(tempdir()),
#                                outputPath = outputDir),
#                   outputs = data.frame(objectName = "landscape")
#  )
#  
#  # retrieve the load and save params from the simulation object
#  inputs(mySim)    # shows all files and objects that are "inputs"
#  outputs(mySim)   # shows all files and objects that are "outputs"
#  
#  params(mySim)$randomLandscapes$.saveInitialTime
#  params(mySim)$randomLandscapes$.saveInterval
#  params(mySim)$randomLandscapes$.saveObjects
#  params(mySim)$randomLandscapes$.savePath
#  ftmp <- tempfile(pattern = "spades_vignetteOutputs", fileext = ".pdf")
#  pdf(ftmp)
#  clearPlot()
#  mySim2 <- spades(mySim)
#  
#  # More sophisticated, passing arguments to outputs()
#  outputs(mySim) <- data.frame(
#    objectName = "landscape", fun = "writeRaster", package = "terra",
#    saveTime = c(3,6), arguments = I(lapply(c(3,6), function(x) {
#      list(datatype = "FLT4S", filetype = "GTiff", overwrite = TRUE)
#  })))
#  mySim2 <- spades(mySim)
#  dev.off()
#  unlink(normalizePath(ftmp))

## ----save-events, echo=TRUE, eval=FALSE, message=FALSE------------------------
#  ### WITHIN A MODULE:
#  
#  # schedule a recurring save event
#  nextSave <- time(mySim) + params(mySim)$randomLandscapes$.saveInterval
#  sim <- scheduleEvent(mySim, nextSave, "randomLandscapes", "save")

## ----plotting, echo=TRUE, eval=FALSE, message=FALSE---------------------------
#  # initialize a new simulation, setting the load and save parameters
#  mySim <- simInit(times = list(start = 0, end = 5),
#                   params = list(
#                     .globals = list(stackName = "landscape"),
#                     randomLandscapes = list(.plotInitialTime = 0, .plotInterval = 1)
#                   ),
#                   modules = list("randomLandscapes"),
#                   paths = list(modulePath = getSampleModules(tempdir()))
#  )
#  
#  # retrieve the plotting params from the simulation object
#  params(mySim)$randomLandscapes$.plotInitialTime
#  params(mySim)$randomLandscapes$.plotInterval

## ----plot-events, echo=TRUE, eval=FALSE, message=FALSE------------------------
#  ### WITHIN A MODULE:
#  
#  # schedule a recurring plot event
#  nextPlot <- time(mySim) + params(mySim)$randomLandscapes$.plotInterval
#  mySim <- scheduleEvent(mySim, nextPlot, "randomLandscapes", "save")

## ----caribouMovement, echo=TRUE, eval=FALSE-----------------------------------
#  openModules(getSampleModules(tempdir()), "moduleName")

## ----download-module, echo=TRUE, eval=FALSE-----------------------------------
#  downloadModule("moduleName")

## ----create-new-module, eval=FALSE, echo=TRUE, message=FALSE------------------
#  # create a new module called "randomLandscape" in the "custom-modules" subdirectory
#  # and open the resulting file immediately for editing.
#  newModule(name = "randomLandscapes", path = "custom-modules", open = TRUE)

## ----module-group-init, eval=FALSE--------------------------------------------
#  library(DiagrammeR)
#  library(SpaDES.core)
#  
#  outputDir <- file.path(tempdir(), "simOutputs")
#  times <- list(start = 0.0, end = 20.0)
#  parameters <- list(
#    .globals = list(stackName = "landscape", burnStats = "nPixelsBurned"),
#    .progress = list(NA),
#    randomLandscapes = list(nx = 100L, ny = 100L, inRAM = TRUE),
#    fireSpread = list(
#      nFires = 10L, spreadprob = 0.225, its = 1e6, persistprob = 0,
#      returnInterval = 10, startTime = 0,
#      .plotInitialTime = 0, .plotInterval = 10
#    ),
#    caribouMovement = list(
#      N = 100L, moveInterval = 1, torus = TRUE,
#      .plotInitialTime = 1, .plotInterval = 1
#    )
#  )
#  modules <- list("SpaDES_sampleModules")
#  objects <- list()
#  paths <- list(
#    modulePath = getSampleModules(tempdir()),
#    outputPath = outputDir
#  )
#  
#  mySim <- simInit(times = times, params = parameters, modules = modules,
#                   objects = objects, paths = paths)
#  
#  modules(mySim) # note the child modules are initialized

## ----module-group-dl, eval=FALSE----------------------------------------------
#  downloadModule("SpaDES_sampleModules")

## ----cleanup, echo=FALSE------------------------------------------------------
#  unlink(outputDir, recursive = TRUE)
PredictiveEcology/SpaDES.core documentation built on April 17, 2024, 8:27 a.m.