如何在R包函数中获取配置数据?

时间:2017-10-17 21:24:33

标签: r config r-package

如果我在普通的R脚本中使用配置文件,我会这样做:

config.R

a <- 1
b <- 2
c <- 3

RSCRIPT

source('config.R')
d = a+b+c
Do stuff

我如何在R包中做到这一点?我可以保留一个配置文件并将其源于R函数吗?或者我应该在每个函数中包含a,b,c吗?什么是最佳做法?

2 个答案:

答案 0 :(得分:1)

如果配置应包含在R包本身中:

  1. 将配置文件存储在/** * Fit SVGs to their first text child's viewBox */ fitSvgTextElements() { const elements = document.querySelectorAll('svg.text'); for( const el of elements ) { const box = el.querySelector('text').getBBox(); el.setAttribute('viewBox', `${box.x} ${box.y} ${box.width} ${box.height}`); } } 文件夹中。 安装软件包后,配置包含在软件包位置(inst/configs)的configs文件夹中

  2. 使用软件包功能中的软件包安装目录来获取配置文件:

libPaths()
  1. 然后,客户端可以触发配置并使用它(例如,传递)
myPackage::load_config <- function(config_file_name = "default_config.R",
                                   config_file_path = system.file("configs", package = getPackageName(), mustWork = TRUE))
{
    env <- new.env()     # all values are then contained in an separate environment
    # env <- globalenv() # to make the variables visible in the client's environment 
    config_file_FQN <- file.path(config_file_path, config_file_name)
    source(config_file_FQN, local = env, keep.source = TRUE)
    return(env)
}

或将环境与配置的变量一起存储在包中 作为程序包全局变量,请参见以下示例代码(很抱歉,在这里无法太多说明): https://github.com/aryoda/tryCatchLog/blob/master/R/zzz.R#L47

答案 1 :(得分:0)

1:一个选项是将这些作为您的函数中的默认值。如在 my_fun <- function(..., a = 1, b = 2)等等。

2:鉴于您在软件包中拥有的是函数,您可以轻松地在主函数中声明它们。因此,这些被调用的其他函数可以访问它们。

3:另一个选择是将它们保留为功能。

a <- function() 
      a <- 1 

现在,您可以随时拨打a(),如a() + 2

4:另一种选择是使用环境。我没有那么多使用。我认为你会发现this很有用,特别是关于包状态的部分。