我正在写一个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)
}
我考虑过创建一个环境,在其中指定所有默认值,然后从该环境中将它们作为默认值。但是我不太确定这是一个好的做法。请帮助:)。
答案 0 :(得分:0)
您可以创建一个不带参数的函数,并返回存储值的向量/列表。然后,您只需将该函数调用作为参数传递给需要这些值的任何函数。
apply_correction(日期,输入,因子= default_factors())
让函数返回一个命名列表或向量,以便您可以通过一种明智的方式访问数据:factors $ a