属性赋值运算符是否需要在 NAMESPACE 中声明?如何?
Do attribute assignment operators need to be declared in NAMESPACE? How?
我有一个带有函数 foo
的包,它使用 rlang::fn_fmls()
和 rlang::fn_fmls()<-
:
#' @importFrom rlang fn_fmls missing_arg
foo <- function(x) {
args <- rlang::fn_fmls(x)
args <- c(args, bar = rlang::missing_arg())
rlang::fn_fmls(x) <- args
return(x)
}
使用 roxygen2,我显然需要用 @importFrom rlang ...
记录这个函数,以便在我的命名空间中声明这些函数。但是,包含 fn_flms
是否也处理 fn_fmls<-
的声明?还是也需要单独包含?如果是这样,如何? @importFrom rlang fn_fmls<-
? "fn_fmls()<-"
?
fn_fmls<-
是一个完全独立的函数,是所谓的 replacement function 的一个示例,您可以在 link 中阅读更多相关信息。要点是它必须采用 function_name<-
形式,并且总是 returns 它的第一个参数的修改版本。
我们可以在 rlang
文档中看到 fn_fmls<-
有两个参数,fn
和 value
。该函数用于将 fn
的形式参数替换为 value
。使用一个非常简单的例子,如果我们只导入 fn_fmls
,我们得到:
#' @importFrom rlang fn_fmls
foo <- function(values) {
fn <- function(a = 1, b = 2) A + B
fn_fmls(fn) <- values
fn()
}
foo(list(A = 10, B = 20))
#> Error in fn_fmls(fn) <- values : could not find function "fn_fmls<-"
相反,如果我们导入 fn_fmls<-
,我们得到:
#' @importFrom rlang `fn_fmls<-`
foo <- function(values) {
fn <- function(a = 1, b = 2) A + B
fn_fmls(fn) <- values
fn()
}
foo(list(A = 10, B = 20))
#> [1] 30
请注意,我们不必导入 fn_fmls
。这是因为,类似的命名只是方便的约定,因为 fn_fmls
是一个函数来检索函数的形式参数,所以命名一个函数来替换函数的形式参数是合乎逻辑的 fn_fmls<-
, 因为它会写成 fn_fmls(fn) <- value
.
我有一个带有函数 foo
的包,它使用 rlang::fn_fmls()
和 rlang::fn_fmls()<-
:
#' @importFrom rlang fn_fmls missing_arg
foo <- function(x) {
args <- rlang::fn_fmls(x)
args <- c(args, bar = rlang::missing_arg())
rlang::fn_fmls(x) <- args
return(x)
}
使用 roxygen2,我显然需要用 @importFrom rlang ...
记录这个函数,以便在我的命名空间中声明这些函数。但是,包含 fn_flms
是否也处理 fn_fmls<-
的声明?还是也需要单独包含?如果是这样,如何? @importFrom rlang fn_fmls<-
? "fn_fmls()<-"
?
fn_fmls<-
是一个完全独立的函数,是所谓的 replacement function 的一个示例,您可以在 link 中阅读更多相关信息。要点是它必须采用 function_name<-
形式,并且总是 returns 它的第一个参数的修改版本。
我们可以在 rlang
文档中看到 fn_fmls<-
有两个参数,fn
和 value
。该函数用于将 fn
的形式参数替换为 value
。使用一个非常简单的例子,如果我们只导入 fn_fmls
,我们得到:
#' @importFrom rlang fn_fmls
foo <- function(values) {
fn <- function(a = 1, b = 2) A + B
fn_fmls(fn) <- values
fn()
}
foo(list(A = 10, B = 20))
#> Error in fn_fmls(fn) <- values : could not find function "fn_fmls<-"
相反,如果我们导入 fn_fmls<-
,我们得到:
#' @importFrom rlang `fn_fmls<-`
foo <- function(values) {
fn <- function(a = 1, b = 2) A + B
fn_fmls(fn) <- values
fn()
}
foo(list(A = 10, B = 20))
#> [1] 30
请注意,我们不必导入 fn_fmls
。这是因为,类似的命名只是方便的约定,因为 fn_fmls
是一个函数来检索函数的形式参数,所以命名一个函数来替换函数的形式参数是合乎逻辑的 fn_fmls<-
, 因为它会写成 fn_fmls(fn) <- value
.