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)