Learn R Programming

SpaDES.core (version 2.0.5)

suppliedElsewhere: Assess whether an object has or will be supplied from elsewhere

Description

When loading objects into a simList, especially during the simInit call, and inside the .inputObjects functions of modules, it is often useful to know if an object in question will or has been by the user via the inputs or objects arguments, or by another module's .inputObjects while preparing its expected inputs (via expectsInputs in metadata), or if it will be supplied by another module during its "init" event. In all these cases, it may not be necessary for a given module to load any default value for its expectsInputs. This function can be used as a check to determine whether the module needs to proceed in getting and assigning its default value.

Usage

suppliedElsewhere(
  object,
  sim,
  where = c("sim", "user", "initEvent"),
  returnWhere = FALSE
)

Value

logical

Arguments

object

Character vector

sim

A simList in which to evaluated whether the object is supplied elsewhere

where

Character vector with one to three of "sim", "user", or "initEvent". Default is all three. Partial matching is used. See details.

returnWhere

Logical, default FALSE, whether the vector of length 3 logical should be returned, or a logical of length one

Details

where indicates which of three places to search, either "sim" i.e., the simList, which would be equivalent to is.null(sim\$objName), or "user" which would be supplied by the user in the simInit function call via outputs or inputs (equivalent to (!('defaultColor' \%in\% sim$.userSuppliedObjNames))), or "initEvent", which would test whether a module that gets loaded before the present one will create it as part of its outputs (i.e., as indicated by createsOutputs in that module's metadata). There is a caveat to this test, however; if that other event also has the object as an expectsInput, then it would fail this test, as it also needs it as an input. This final one ("initEvent") does not explicitly test that the object will be created in the "init" event, only that it is in the outputs of that module, and that it is a module that is loaded prior to this one.

Examples

Run this code
mySim <- simInit()
suppliedElsewhere("test", mySim) # FALSE

# supplied in the simList
mySim$test <- 1
suppliedElsewhere("test", mySim) # TRUE
test <- 1

# supplied from user at simInit time -- note, this object would eventually get into the simList
#   but the user supplied values come *after* the module's .inputObjects, so
#   a basic is.null(sim$test) would return TRUE even though the user supplied test
mySim <- simInit(objects = list("test" = test))
suppliedElsewhere("test", mySim) # TRUE

# \donttest{
# Example with prepInputs
# Put chunks like this in your .inputObjects
if (!suppliedElsewhere("test", mySim))
  sim$test <- Cache(prepInputs, "raster.tif", "downloadedArchive.zip",
                    destinationPath = dataPath(sim), studyArea = sim$studyArea,
                    rasterToMatch = sim$otherRasterTemplate, overwrite = TRUE)
# }

Run the code above in your browser using DataLab