param6 is an R6 parameter set interface for storing multiple parameters that may be used in other R6 (or other paradigm) objects. Key use-cases for R6 parameter sets have been seen in packages such as:
Some main features/key use-cases of param6 includes:
prms <- list(
prm(id = "a", support = "reals", value = 1),
prm(id = "b", support = "naturals")
)
ParameterSet$new(prms)
prms <- list(
prm(id = "a", support = "reals", value = 1, tags = "t1"),
prm(id = "b", support = "nnaturals", tags = "t2")
)
ParameterSet$new(prms,
list(required = "t1", unique = "t2"))
prms <- list(
prm(id = "a", support = "reals", value = 1, tags = "t1"),
prm(id = "b", support = "naturals", tags = "t2")
)
p <- ParameterSet$new(prms)
p$values$b <- 2
p$values
p$get_values(tags = "t1", simplify = FALSE)
p <- ParameterSet$new(
list(prm(id = "a", support = "naturals", value = 4))
)
p$trafo <- function(x, self) {
x$a <- 2^x$a
x
}
p$get_values("a", simplify = FALSE)
p <- ParameterSet$new(list(
prm(id = "a", support = "naturals"),
prm(id = "b", support = "naturals")
))
p$add_dep("a", "b", cnd("eq", 4))
p$values$b <- 5
p$values$a <- 1 # fails as b != 4
p$values$b <- 4
p$values$a <- 1 # now works
p$get_values()
param6 began as the ParameterSet
object in distr6. However this initial attempt at an R6 parameter set interface, had massive bottlenecks that were causing substantial problems in dependencies. param6 is an abstracted parameter set interface that draws influence from this initial design. param6 achieves faster run-times and smaller object-sizes than other parameter set packages by making the following design decisions:
data.table
objects are minimised and only used when absolutely necessary, instead list
objects are utilised.param6 can be installed from R-Universe
# Enable repository from raphaels1
options(repos = c(
raphaels1 = 'https://raphaels1.r-universe.dev',
CRAN = 'https://cloud.r-project.org'))
# Download and install param6 in R
install.packages('param6')
And GitHub
remotes::install_github("xoopR/param6")
param6 will not be on CRAN for the forseeable future.
The param6 API is still experimental and may be subject to major changes. To understand if param6 fulfills it’s initial use-case correctly, the next step will be to incorporate the package in distr6, which may involve minor or major changes to the current API. From there, Rcpp will be embraced more fully in set6 and then in param6 to improve package speed.
param6 is released under the MIT licence. We welcome and appreciate all new issues relating to bug reports, questions and suggestions. You can also start a discussion for more extensive feedback or feature suggestion.