如何在R包中重复使用相同的默认参数?如何将它们传递给嵌套函数

  • 本文关键字:函数 嵌套 参数 包中重 默认 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)
}

我已经考虑创建一个环境,在该环境中指定所有默认值,然后从环境中获取它们作为默认值。但我不太确定这对一揽子计划来说是个好做法。请帮忙:(。

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

apply_correction(dat,input,factors=default_factors(((

让您的函数返回一个命名列表或向量,这样您就可以以合理的方式访问数据:factors$a

最新更新