如何在R-package中重用相同的默认参数?以及如何将它们传递给嵌套函数?

时间:2018-12-03 10:38:34

标签: r package

我正在写一个R包,我想在其中启用一些单位转换等操作。但是,转换所需的参数(例如,摄氏温度转换为开氏温度为273.15)可能会发生变化(某些参数已在2010年重新校准!)。这意味着我想将它们作为函数参数传递,以便用户可以轻松地对其进行更改,但是由于它们已在多个函数中使用,因此我想找到一种“全局”执行此操作的方法。

但是,全局参数是邪恶的,我希望我的函数保持完整的功能(总是在给定相同输入的情况下提供相同的输出)。

  • 我要记录默认值来自(引用)的位置
  • 我只想定义一次值,以便我可以轻松地更新它们
  • 我想将这些值作为默认值传递给几个函数
  • 我想将值作为默认值传递给具有嵌套函数(也需要参数)的函数。参数最好保持相同的名称。

举个例子:

# example data to work with
set.seed(123)
dat <- data.frame(x = 1:10, input = rnorm())

# first function, documented in roxygen2 style

#' Apply correction
#'
#' @importFrom magrittr `%>%`
#' @param dat Data to process.
#' @param input the column quosure of dat to apply the correction to.
#' @param factora Correction factor A to apply. Defaults to 0.3545, from \citet{Anon2018}.
#' @param factorb Correction factor B to apply. Defaults to 8.988, from \citet{Bnon2018}.
apply_correction <- function(dat, input = quo(input), factora = 0.3545, factorb = 8.988) {
  dat %>%
      mutate(processed = !!input * factora - factorb)
}

#' Multiple steps
#'
#' @inheritParams apply_correction
#' @inheritParams function_that_uses_factorc
multiple_steps <- function(dat, factorc = 3.421, factora = 0.3545, factorb = 8.988) {
        dat %>%
           mutate(step1 = input * factorc) %>%
           apply_correction(quo(step1), factora = factora, factorb = factorb)
}

我考虑过创建一个环境,在其中指定所有默认值,然后从该环境中将它们作为默认值。但是我不太确定这是一个好的做法。请帮助:)。

1 个答案:

答案 0 :(得分:0)

您可以创建一个不带参数的函数,并返回存储值的向量/列表。然后,您只需将该函数调用作为参数传递给需要这些值的任何函数。

apply_correction(日期,输入,因子= default_factors())

让函数返回一个命名列表或向量,以便您可以通过一种明智的方式访问数据:factors $ a