Как мне повторно использовать те же аргументы по умолчанию в R-пакете?И как мне передать их во вложенные функции? - PullRequest
0 голосов
/ 03 декабря 2018

Я пишу 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 голосов
/ 27 декабря 2018

Вы можете создать функцию, которая не принимает аргументов и возвращает вектор / список ваших сохраненных значений.Затем вы просто передаете вызов этой функции в качестве аргумента любой функции, которой нужны эти значения.

apply_correction (dat, input, factor = default_factors ())

Пусть ваша функция вернет именованный список или вектор, так что вы можете получить доступ к данным разумным способом: факторы $ a

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...