Skip to content

The goal of tgconfig is to provide infrastructure for managing package parameters, (inspired by https://github.com/r-lib/pkgconfig)

License

Notifications You must be signed in to change notification settings

tanaylab/tgconfig

Repository files navigation

Travis build status Codecov test coverage

tgconfig

The goal of tgconfig is to provide infrastructure for managing package parameters, inspired by pgkconfig

Code

code can be found at https://github.com/tanaylab/tgconfig

Installation

install.packages('tgconfig', repos=c(getOption('repos'), 'https://tanaylab.github.io/repo'))

Usage

Parameters are easy to get in relevant functions within a package:

library(tgconfig)
register_param('param', 'scrdb')
set_param('param', 'value', 'scrdb')
get_param_strict('param', 'scrdb')
#> [1] "value"

Error is thrown if a parameter is missing:

get_param_strict('another', 'scrdb')
#> Error in get_param(param, package = package, fallback = stop(sprintf("there is no parameter \"%s\" in package \"%s\"", : there is no parameter "another" in package "scrdb"

Developers are able to register parameters and set their default value in a config file that is part of the package in YAML format:

char_param: value
expr_param: !expr seq(1:5)
numeric_param: 500
boolean_param: true
config_file <- example_config_file()
register_params(config_file, 'scrdb')
get_package_params('scrdb')
#> $param
#> [1] "value"
#> 
#> $char_param
#> [1] "value"
#> 
#> $expr_param
#> [1] 1 2 3 4 5
#> 
#> $numeric_param
#> [1] 500
#> 
#> $boolean_param
#> [1] TRUE

Users are able to override parameters using their own YAML:

char_param: 'user_char'
expr_param: 'user_exp'
numeric_param: 700
boolean_param: false
override_params(system.file('config/override_example.yaml', package='tgconfig'), package='scrdb')
get_package_params('scrdb')
#> $param
#> [1] "value"
#> 
#> $char_param
#> [1] "user_char"
#> 
#> $expr_param
#> [1] "user_exp"
#> 
#> $numeric_param
#> [1] 700
#> 
#> $boolean_param
#> [1] FALSE

Users get an exception when trying to override a parameter that was not registered:

set_param('other_param', 'value', 'scrdb')
#> Error in set_param("other_param", "value", "scrdb"): parameter other_param is not registered in package "scrdb"

Users can load multiple parameters to the current environment:

load_params_to_env(c('expr_param', 'boolean_param'), 'scrdb')
expr_param
#> [1] "user_exp"
boolean_param
#> [1] FALSE