Recent changes have motivated a switch in the Strategy type that we expose in R.
Currently, RcppR6 generates a Strategy as a simple list object, which is lightweight, but does not expose any methods implemented in C++. Using a R6 object to expose these additional routines would allow better control of the ExtrinsicDrivers (implemented in #334) and other state transformations (as described in #309), simplifying some of our R code.
This change will introduce some additional complexity and require changes to how we initialise a Patch using a Parameters object.
The existing workflow involves:
Generating scm_base_parameters or equiv.
Adding parameterised strategies using expand_parameters, appending a list of Strategies to p$strategies
Passing the Parameters object into the Patch or SCM solver
Initialising each species and their ExtrinsicDrivers
An alternative might instead be to remove the strategies from Parameters and instead:
Generate a list of parameterised Strategy objects using e.g. generate_strategies
Set or modify the extrinsic drivers using set_variable(driver_name, x_vector, y_vector) or set_constant(driver_name, y)
Pass the list of Strategies into run_scm(strategy_list, environment, parameters, control)
This change could require substantial modifications to existing workflows and documentation. Happy to spend the time documenting a solution before we commit to implementation. Please share your thoughts!
Recent changes have motivated a switch in the Strategy type that we expose in R.
Currently, RcppR6 generates a Strategy as a simple list object, which is lightweight, but does not expose any methods implemented in C++. Using a R6 object to expose these additional routines would allow better control of the ExtrinsicDrivers (implemented in #334) and other state transformations (as described in #309), simplifying some of our R code.
This change will introduce some additional complexity and require changes to how we initialise a Patch using a Parameters object.
The existing workflow involves:
scm_base_parameters
or equiv.expand_parameters
, appending a list of Strategies top$strategies
An alternative might instead be to remove the strategies from Parameters and instead:
generate_strategies
set_variable(driver_name, x_vector, y_vector)
orset_constant(driver_name, y)
run_scm(strategy_list, environment, parameters, control)
This change could require substantial modifications to existing workflows and documentation. Happy to spend the time documenting a solution before we commit to implementation. Please share your thoughts!