Type: | Package |
Title: | APSIM Next Generation |
Version: | 0.4.4 |
Description: | The Agricultural Production Systems sIMulator ('APSIM') is a widely used to simulate the agricultural systems for multiple crops. This package is designed to create, modify and run 'apsimx' files in the 'APSIM' Next Generation https://www.apsim.info/. |
License: | MIT + file LICENSE |
URL: | https://rapsimng.bangyou.me/, https://github.com/byzheng/rapsimng |
BugReports: | https://github.com/byzheng/rapsimng/issues |
Encoding: | UTF-8 |
Depends: | R (≥ 3.5.0) |
Imports: | jsonlite, tibble, magrittr, dplyr, rlang, DBI, RSQLite |
RoxygenNote: | 7.3.0 |
Suggests: | testthat, knitr, rmarkdown, tidyverse, methods |
VignetteBuilder: | knitr |
NeedsCompilation: | no |
Packaged: | 2024-02-01 23:40:35 UTC; zhe00a |
Author: | Bangyou Zheng [aut, cre] |
Maintainer: | Bangyou Zheng <bangyou.zheng@csiro.au> |
Repository: | CRAN |
Date/Publication: | 2024-02-02 00:00:02 UTC |
append a model into apsimx
Description
append a model into apsimx
Usage
append_model(l, path, model)
Arguments
l |
the list of apsimx file |
path |
If numeric, the path returned by search_path or search_node. If character, the path supported by apsimx |
model |
A new model which should be a list of new models |
Value
The modified list with new value
Examples
wheat <- read_apsimx(system.file("extdata/wheat.apsimx", package = "rapsimng"))
replacements <- new_model("Core.Replacements")
wheat_new <- insert_model(wheat, 1, replacements)
replacements_node <- search_path(wheat_new, ".Simulations.Replacements")
replacements_node$path
# Add a cultivar folder under replacements
cultivar_folder <- new_model("PMF.CultivarFolder", "Cultivars")
wheat_new <- insert_model(wheat_new, replacements_node$path, cultivar_folder)
cultivar_folder_node <- search_path(wheat_new,
".Simulations.Replacements.Cultivars")
cultivar_folder_node$path
# Add an new cultivar
cultivar <- new_model("PMF.Cultivar", "Hartog")
wheat_new <- insert_model(wheat_new, cultivar_folder_node$path, cultivar)
cultivar_node <- search_path(wheat_new,
".Simulations.Replacements.Cultivars.Hartog")
cultivar_node$path
# Append another cultivar
cultivar2 <- new_model("PMF.Cultivar", "Axe")
wheat_new <- append_model(wheat_new, cultivar_node$path, list(cultivar2))
cultivar2_node <- search_path(wheat_new,
".Simulations.Replacements.Cultivars.Axe")
cultivar2_node$path
List all available models in APSIM NG
Description
List all available models in APSIM NG
Usage
available_models()
Value
a character vector of available models
Examples
a <- available_models()
a[1:10]
Disable models in apsimx
Description
Disable models in apsimx
Usage
disable_models(l, paths)
Arguments
l |
the list of apsimx file |
paths |
If numeric, the path returned by search_path or search_node. If character, the path supported by apsimx |
Value
The modified list with new value
Examples
wheat <- read_apsimx(system.file("extdata/Wheat.json", package = "rapsimng"))
a <- disable_models(wheat, '[Wheat].Phenology.ThermalTime')
Get all cultivar parameters in a model
Description
Get all cultivar parameters in a model
Usage
get_cultivar(l, alias = TRUE)
Arguments
l |
The list of apsimx file |
alias |
Whether to export alias |
Value
A data frame for all cultivar parameters
Examples
wheat <- read_apsimx(system.file("extdata/Wheat.json", package = "rapsimng"))
get_cultivar(wheat)
get_cultivar(wheat, alias = FALSE)
Get the met file name for an experiment
Description
Get the met file name for an experiment
Usage
get_metfile(l, is_stop = TRUE)
Arguments
l |
A list or apsimxNode red by read_apsimx |
is_stop |
Whether stop the function when error |
Value
The met file name in a experiment
Examples
wheat <- read_apsimx(system.file("extdata/wheat.apsimx", package = "rapsimng"))
exp <- search_path(wheat, path = "[Experiment]")
get_metfile(exp)
Get the parent node from a path
Description
Get the parent node from a path
Usage
get_parent(l, path)
Arguments
l |
the list of apsimx file |
path |
If numeric, the path returned by search_path or search_node. If character, the path supported by apsimx |
Value
A new list for parent
Examples
wheat <- read_apsimx(system.file("extdata/Wheat.json", package = "rapsimng"))
a <- search_path(wheat, '[Structure].BranchingRate')
get_parent(wheat, a$path)
Get simulations for a factorial experiment
Description
Get simulations for a factorial experiment
Usage
get_simulations(l)
Arguments
l |
A list from read_apsim with Factorial.Permutation as root. |
Value
A list with Factor as name and Levels as values
Examples
wheat <- read_apsimx(system.file("extdata/wheat.apsimx", package = "rapsimng"))
permutation <- search_path(wheat, path = "[Factors].Permutation")
get_simulations(permutation$node)
Insert a model into apsimx
Description
Insert a model into apsimx
Usage
insert_model(l, path, model)
Arguments
l |
the list of apsimx file |
path |
If numeric, the path returned by search_path or search_node. If character, the path supported by apsimx |
model |
A new model |
Value
The modified list with new value
Examples
wheat <- read_apsimx(system.file("extdata/wheat.apsimx", package = "rapsimng"))
replacements <- new_model("Core.Replacements")
wheat_new <- insert_model(wheat, 1, replacements)
replacements_node <- search_path(wheat_new, ".Simulations.Replacements")
replacements_node$path
# Add a cultivar folder under replacements
cultivar_folder <- new_model("PMF.CultivarFolder", "Cultivars")
wheat_new <- insert_model(wheat_new, replacements_node$path, cultivar_folder)
cultivar_folder_node <- search_path(wheat_new,
".Simulations.Replacements.Cultivars")
cultivar_folder_node$path
# Add an new cultivar
cultivar <- new_model("PMF.Cultivar", "Hartog")
wheat_new <- insert_model(wheat_new, cultivar_folder_node$path, cultivar)
cultivar_node <- search_path(wheat_new,
".Simulations.Replacements.Cultivars.Hartog")
cultivar_node$path
Insert models into apsimx
Description
Insert models into apsimx
Usage
insert_models(l, path, models)
Arguments
l |
the list of apsimx file |
path |
If numeric, the path returned by search_path or search_node. If character, the path supported by apsimx |
models |
New models |
Value
The modified list with new value
Examples
wheat <- read_apsimx(system.file("extdata/wheat.apsimx", package = "rapsimng"))
replacements <- new_model("Core.Replacements")
wheat_new <- insert_model(wheat, 1, replacements)
replacements_node <- search_path(wheat_new, ".Simulations.Replacements")
replacements_node$path
# Add a cultivar folder under replacements
cultivar_folder <- new_model("PMF.CultivarFolder", "Cultivars")
wheat_new <- insert_model(wheat_new, replacements_node$path, cultivar_folder)
cultivar_folder_node <- search_path(wheat_new,
".Simulations.Replacements.Cultivars")
cultivar_folder_node$path
# Add an new cultivar
cultivar <- new_model("PMF.Cultivar", "Hartog")
wheat_new <- insert_model(wheat_new, cultivar_folder_node$path, cultivar)
cultivar_node <- search_path(wheat_new,
".Simulations.Replacements.Cultivars.Hartog")
cultivar_node$path
Keep simulations for a factorial experiment
Description
Keep simulations for a factorial experiment
Usage
keep_simulations(l, s)
Arguments
l |
A list from read_apsim with Factorial.Permutation as root. |
s |
a list with factor as name and levels as value to keep. The factor is kept if it is not specified. |
Value
A new list with removed simulations.
Examples
wheat <- read_apsimx(system.file("extdata/wheat.apsimx", package = "rapsimng"))
permutation <- search_path(wheat, path = "[Factors].Permutation")
permutation_new <- keep_simulations(permutation$node, list(V = "2"))
get_simulations(permutation_new)
permutation_new <- keep_simulations(permutation$node, list(Cv = c("Axe", "Bolac")))
get_simulations(permutation_new)
permutation_new <- keep_simulations(permutation$node,
list(V = "1", Cv = c("Axe", "Bolac")))
get_simulations(permutation_new)
List all reports in the database
Description
List all reports in the database
Usage
list_report(file)
Arguments
file |
the file path to apsimx or db file |
Value
a vector of all reports
Examples
## Not run:
file <- system.file("extdata/wheat.apsimx", package = "rapsimng")
list_report(file)
## End(Not run)
Create the minimum requirements to run an APSIM Next Generation
Description
Create the minimum requirements to run an APSIM Next Generation
Usage
minimum_apsimng(install_path, output)
Arguments
install_path |
The installed path of APSIM Next Generation |
output |
The output folder |
Examples
## Not run:
minimum_apsimng("C:/ProgramFiles/APSIMNG", "minimum_apsimng")
## End(Not run)
Create a new model
Description
Create a new model
Usage
new_model(model, name = model)
Arguments
model |
The name of new model |
name |
The new name |
Examples
new_model(model = "PMF.Cultivar")
new_model(model = "PMF.Cultivar", name = "example")
Read APSIMX file
Description
Read APSIMX file
Usage
read_apsimx(path)
Arguments
path |
The file path or URL to apsimx file |
Value
A list object of apsimx file
Examples
file <- system.file("extdata/wheat.apsimx", package = "rapsimng")
m <- read_apsimx(file)
Read apsimx database in db file format
Description
Read apsimx database in db file format
Usage
read_report(file, report)
Arguments
file |
the file path to apsimx or db file |
report |
the report name |
Value
a data.frame for a report
Examples
## Not run:
file <- system.file("extdata/wheat.apsimx", package = "rapsimng")
read_report(file, "HarvestReport")
## End(Not run)
Remove a model with new values
Description
Remove a model with new values
Usage
remove_model(l, path)
Arguments
l |
the list of apsimx file |
path |
If numeric, the path returned by search_path or search_node. If character, the path supported by apsimx |
Value
The modified list with new value
Examples
wheat <- read_apsimx(system.file("extdata/Wheat.json", package = "rapsimng"))
a <- search_path(wheat, '[Wheat].Phenology.ThermalTime')
wheat_new <- remove_model(wheat, a$path)
b <- search_path(wheat_new, '[Wheat].Phenology.ThermalTime')
b
Replace a model with new values
Description
Replace a model with new values
Usage
replace_model(l, path, model)
Arguments
l |
the list of apsimx file |
path |
If numeric, the path returned by search_path or search_node. If character, the path supported by apsimx |
model |
A new model |
Value
The modified list with new value
Examples
wheat <- read_apsimx(system.file("extdata/Wheat.json", package = "rapsimng"))
a <- search_path(wheat, '[Wheat].Phenology.ThermalTime')
a$node$Children[[1]]$X[[2]] <- 27
wheat_new <- replace_model(wheat, a$path, a$node)
b <- search_path(wheat_new, '[Wheat].Phenology.ThermalTime')
b$node$Children[[1]]$X
Run apsimx file using Models.exe
Description
Run apsimx file using Models.exe
Usage
run_models(
models_exe,
path,
pattern = NULL,
recurse = FALSE,
csv = FALSE,
parallel = NULL,
ncpus = NULL,
verbose = FALSE
)
Arguments
models_exe |
path to Models.exe |
path |
The path to an .apsimx file. May include wildcard. |
pattern |
Use to filter simulation names to run. |
recurse |
Recursively search subdirectories for files matching ApsimXFileSpec. FALSE in default. |
csv |
Export all reports to .csv files. FALSE in default. |
parallel |
Use the multi-process job runner. If FALSE, use single threaded; if TRUE, use the multi-process job runner |
ncpus |
Set the number of processors to use. All processes in default |
verbose |
Write messages to StdOut when a simulation starts/finishes. Only has an effect when running a directory of .apsimx files (*.apsimx). |
Find element(s) in apsimx file
Description
Find element(s) in apsimx file
Usage
search_node(l, all = FALSE, max_depth = 1e+06, case_insensitive = TRUE, ...)
Arguments
l |
The list of apsimx file |
all |
Whether to find all elements |
max_depth |
The maximum depth to search |
case_insensitive |
Whether case sensitive |
... |
Other names arguments for property to match |
Value
A list matching all criteria if all equals to TRUE, A list with node and path if all equals to FALSE (default)
Examples
wheat <- read_apsimx(system.file("extdata/Wheat.json", package = "rapsimng"))
# Return empty list if not found
search_node(wheat, Name = "Simulations1")
# Find root level
a <- search_node(wheat, Name = "Simulations")
a$path
# Find sub-level
a <- search_node(wheat, Name = "Wheat")
a$path
a <- search_node(wheat, `$type` = "Models.PMF.Cultivar, Models")
a$path
# Find multiple attributes
a <- search_node(wheat,
Name = 'PotentialBranchingRate',
`$type` = "Models.Functions.PhaseLookup, Models")
a$path
a$node$Name
# Find all cultivar nodes
a <- search_node(wheat, `$type` = "Models.PMF.Cultivar, Models", all = TRUE)
length(a)
Find a model in the apsimx file using specified path
Description
Find a model in the apsimx file using specified path
Usage
search_path(l, path, case_insensitive = TRUE)
Arguments
l |
the list of apsimx file |
path |
The specified path (See details) |
case_insensitive |
Whether case sensitive |
Value
The list for the specified path.
Absolute Paths
Absolute paths have a leading ‘.’ e.g.
.Simulations.Test.Clock - absolute path - refers to the clock model in the 'Test' simulation.
Scoped Paths
Scoped paths have a leading model type in square brackets. A model of the specified name, in scope, is located before applying the rest of the path.
[Soil].Water - scoped path - refers to the Water model that is a child of a model that has the name 'Soil' that is in scope
Examples
wheat <- read_apsimx(system.file("extdata/Wheat.json", package = "rapsimng"))
# Return empty list if not found
search_path(wheat, "[Simulations1]")
# Search root path
a <- search_path(wheat, '.Simulations')
a$path
a$node$Name
# Level one
a <- search_path(wheat, '.Simulations.Wheat1')
a$path
a$node$Name
# Level two
a <- search_path(wheat, '.Simulations.Wheat')
a$path
a$node$Name
# Level three
a <- search_path(wheat, '.Simulations.Wheat.BranchingRate')
a$path
a$node$Name
a <- search_path(wheat, '.Simulations.Wheat.Structure')
a$path
a$node$Name
# Level four
a <- search_path(wheat, '.Simulations.Wheat.Structure.BranchingRate')
a$path
a$node$Name
a <- search_path(wheat, '.Simulations.Wheat.Structure.BranchingRate1')
a$path
a$node$Name
# scoped
# Root path
a <- search_path(wheat, '[Simulations1]')
a <- search_path(wheat, '[Simulations]')
a$path
a$node$Name
# Level two
a <- search_path(wheat, '[Simulations].Wheat1')
a <- search_path(wheat, '[Simulations1].Wheat')
a$path
a$node$Name
a <- search_path(wheat, '[Whea]')
a <- search_path(wheat, '[Wheat]')
a$path
a$node$Name
# Level three
a <- search_path(wheat, '[Wheat].BranchingRate')
a <- search_path(wheat, '[Wheat].Structure')
a$path
a$node$Name
a <- search_path(wheat, '[Structure]')
a$path
a$node$Name
# Level four
a <- search_path(wheat, '[Structure].BranchingRate')
a$path
a$node$Name
a <- search_path(wheat, '[Structure].BranchingRate1')
a <- search_path(wheat, '[Structure1].BranchingRate')
Set a parameter with a new value
Description
Set a parameter with a new value
Usage
set_parameter_value(l, parameter, value)
Arguments
l |
the list of apsimx file |
parameter |
the name of parameter with APSIM NG specification |
value |
the new value |
Value
A list with replaced value
Examples
wheat <- read_apsimx(system.file("extdata/Wheat.json", package = "rapsimng"))
new_wheat <- set_parameter_value(wheat,
"[Structure].BranchingRate.PotentialBranchingRate.Reproductive.Zero.FixedValue",
1)
new_wheat2 <- search_path(new_wheat,
"[Structure].BranchingRate.PotentialBranchingRate.Reproductive.Zero")
new_wheat2$node$FixedValue
new_wheat <- set_parameter_value(
wheat,
"[Structure].HeightModel.WaterStress.XYPairs.Y",
"0.1,1.1")
new_wheat2 <- search_path(new_wheat,
"[Structure].HeightModel.WaterStress.XYPairs")
new_wheat2$node$Y
Test whether all files under published folder of apsimx are required
Description
Test whether all files under published folder of apsimx are required
Usage
test_apsimx(base, example)
Arguments
base |
the base folder path to apsimx publish |
example |
an example apsimx file |
Value
A vector a required files
Title Update the cultivar parameters
Description
This function assumes the file is apsimx format. A new Replacements node is added if it is not exist. The existing cultivar parameters are updated. New cultivar is created.
Usage
update_cultivar(
l,
df,
add = TRUE,
use_folder = TRUE,
cultivar_folder = "Cultivars"
)
Arguments
l |
The list of apsimx file |
df |
A data frame for new parameters with three columns, i.e. name, parameter and value. |
add |
Whether to add extra nodes (e.g. replacements, Cultivars folder and new cultivar) |
use_folder |
use cultivar folder to add new cultivars |
cultivar_folder |
folder name for cultivars |
Value
The modified apsimx file
Examples
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)
hartog <- search_path(wheat_cultivar, "[Replacements].Hartog")
hartog$path
Write APSIMX file
Description
Write APSIMX file
Usage
write_apsimx(l, file)
Arguments
l |
the list of apsimx file |
file |
The file path to apsimx file |
Value
A list object of apsimx file