R 导出包中生成的函数

R 导出包中生成的函数,r,package,R,Package,我经常发现自己必须处理向量,这些向量可能包含也可能不包含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 所以我经常要分开处理这个案子 然而,我有一个个人实

我经常发现自己必须处理向量,这些向量可能包含也可能不包含
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
但是,当我更新名称空间文件并重新生成包时,不会导出函数。它们被添加到包和工作中,但只能通过三个冒号
foo:::min.na()
访问


我如何才能将这些公开导出?

你可以使用
hablar
中的
max_u
min_
hablar::min_(NA)#[1]NA
@akrun有一天我会知道超过1%的R软件包。。。谢谢你的百科全书般的知识。现在检查
hablar
文档。你可以使用
hablar
中的
max_u
min_
hablar::min_(NA)#[1]NA
@akrun有一天我会知道超过1%的R包。。。谢谢你的百科全书般的知识。现在检查
hablar
文档。
.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)