Экспорт сгенерированных функций в пакет - PullRequest
1 голос
/ 28 апреля 2020

Мне часто приходится обращаться с векторами, которые могут содержать или не заполняться значениями NA. Эти NAs ожидаются и должны быть отброшены, что обычно обрабатывается большинством функций с помощью аргумента na.rm = TRUE.

Однако иногда векторы будут полностью NA, что приводит к неправильному поведению многих функций:

min(NA, na.rm = TRUE)
#> Warning in min(NA, na.rm = TRUE): no non-missing arguments to min; returning Inf
#> [1] Inf

Поэтому мне часто приходится разбирать этот случай отдельно.

Однако у меня есть пакет личных утилит, и мне пришло в голову, что я могу справиться с этим довольно легко с помощью функции-оболочки.

min.na <- function(..., .ifEmpty = NA) {
  x <- na.omit(c(...))

  if(length(x) == 0) return(.ifEmpty)
  else return(min(x))
}

min.na(NA)
#> [1] NA

Но min, очевидно, не единственная функция с таким типом поведения (если ничего иного, max делает то же самое, очевидно).

Так что я подумал Лучше всего создать функцию генератора .FUN.na, которая обрабатывает все функции одинаково, и извлечь из нее min.na и max.na:

.FUN.na <- function(FUN, ..ifEmpty = NA) {
  return(
    function(..., .ifEmpty = ..ifEmpty) {
      x <- na.omit(c(...))

      if(length(x) == 0) return(.ifEmpty)
      else return(FUN(x))
    }
  )
}

#' @export
min.na <- .FUN.na(min)

#' @export
max.na <- .FUN.na(max)

Однако, когда я обновляю файл NAMESPACE и перестраиваю пакет , функции не экспортируются. Они добавляются в пакет и работают, но получить к ним доступ можно только через тройной двоеточие foo:::min.na().

Как я могу сделать их публично экспортированными?

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