The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Modify apsimx file

Several functions are designed to modify the apsimx file, including * replace an existing model * remove an existing model * append a new model as sibling node * insert a new model as child

Read apsimx file

read_apsimx is used to read files with apsimx json format, i.e. *.apsimx for simulations and *.json for model under resource.

library(rapsimng)
wheat <- read_apsimx(system.file("extdata/Wheat.json", package = "rapsimng"))
#wheat <- read_apsimx("inst/Wheat.json")

Modify existing model

The existing model can be replaced and removed. The example below shows to update the critical thermal and then remove it.

# Find the ThermalTime model 
a <- search_path(wheat, '[Wheat].Phenology.ThermalTime')
a$node$Children[[1]]$X[[2]]
#> [1] 26
# Update the optimum temperature
a$node$Children[[1]]$X[[2]] <- 27
# Replace with new value
wheat_new <- replace_model(wheat, a$path, a$node)
b <- search_path(wheat_new, '[Wheat].Phenology.ThermalTime')
# The optimum temperature should be updated now
b$node$Children[[1]]$X[[2]]
#> [1] 27

# The ThermalTime model can also be removed
a <- search_path(wheat, '[Wheat].Phenology.ThermalTime')
wheat_new <- remove_model(wheat, a$path)
b <- search_path(wheat_new, '[Wheat].Phenology.ThermalTime')
# The ThermalTime model should not be found now (i.e. Empty list)
b
#> list()

Create new model

Function new_model is used to generate the required elements for a new model, e.g. createing a new cultivar Hartog

new_cultivar <- new_model("PMF.Cultivar", name = "Hartog")
new_cultivar
#> $`$type`
#> [1] "Models.PMF.Cultivar, Models"
#> 
#> $Name
#> [1] "Hartog"
#> 
#> $Children
#> list()
#> 
#> $IncludeInDocumentation
#> [1] TRUE
#> 
#> $Enabled
#> [1] TRUE
#> 
#> $ReadOnly
#> [1] FALSE
#> 
#> $Alias
#> list()
#> 
#> $Command
#> list()

Then the Command can be updated to specify new parameter values.

new_cultivar$Command <- list(
  "[Phenology].MinimumLeafNumber.FixedValue = 6",
  "[Phenology].VrnSensitivity.FixedValue = 0")

Finally the new cultivar can be inserted into apsimx file.

# Read the apsimx file
wheat <- read_apsimx(system.file("extdata/wheat.apsimx", package = "rapsimng"))
# Create a new Replacements
replacements <- new_model("Core.Replacements")
# Insert the replacements into root folder
wheat_new <- insert_model(wheat, 1, replacements)
replacements_node <- search_path(wheat_new, ".Simulations.Replacements")
replacements_node$path
#> [1] 1 3

# Insert the new cultivar
wheat_new <- insert_model(wheat_new, replacements_node$path, new_cultivar)

# Check the new cultivar
cultivar_node <- search_path(wheat_new,
                                        ".Simulations.Replacements.Hartog")
cultivar_node$path
#> [1] 1 3 1
cultivar_node$node$Command
#> [[1]]
#> [1] "[Phenology].MinimumLeafNumber.FixedValue = 6"
#> 
#> [[2]]
#> [1] "[Phenology].VrnSensitivity.FixedValue = 0"

Available models

A new model can be generated in R according to Models assemble in APSIM Next Generation. The rapsimng package stores a copy of Models.xml from APSIM Next Generation on 1st August, 2020.
The available models can be listed using function available_models.

head(data.frame(model = available_models()))
#>                                             model
#> 1                            AgPasture.AGPBiomass
#> 2                           AgPasture.BiomassAndN
#> 3                    AgPasture.BiomassAndNLayered
#> 4                         AgPasture.TissuesHelper
#> 5                         AgPasture.SimpleGrazing
#> 6 AgPasture.SimpleGrazing.GrazingRotationTypeEnum

Update cultivar parameter values

Function update_cultivar is a short way to update parameter values for cultivars.

wheat <- read_apsimx(system.file("extdata/wheat.apsimx", package = "rapsimng"))
# Update cultivars
df <- data.frame(name = rep("Hartog", 3),
                  parameter = c("[Phenology].MinimumLeafNumber.FixedValue",
                               "[Phenology].VrnSensitivity.FixedValue",
                               "[Phenology].PpSensitivity.FixedValue"),
                 value = c(9, 7, 3))
wheat_cultivar <- update_cultivar(wheat, df)
# Check update cultivar paramters
hartog <- search_path(wheat_cultivar, "[Replacements].Hartog")
hartog$path
#> NULL

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.