是否需要在 NAMESPACE 中声明属性赋值运算符?如何?

Was*_*abi 6 r roxygen2

我有一个带有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)
}
Run Code Online (Sandbox Code Playgroud)

使用 roxygen2,我显然需要用 an 来记录这个函数,@importFrom rlang ...以便在我的 NAMESPACE 中声明这些函数。但是,包含fn_flmsthere 是否也处理fn_fmls<-? 还是也需要单独包含?如果是这样,如何?@importFrom rlang fn_fmls<-? "fn_fmls()<-"?

cal*_*lst 2

fn_fmls<-是一个完全独立的函数,是所谓的替换函数的示例,您可以在链接中阅读更多信息。要点是它必须采用 形式function_name<-,并且始终返回其第一个参数的修改版本。

我们可以在rlang文档中看到它fn_fmls<-有两个参数,fnvalue。该函数用于替换 的形式fn参数value。使用一个非常简单的例子,如果我们只 import 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<-"
Run Code Online (Sandbox Code Playgroud)

相反,如果我们 import 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
Run Code Online (Sandbox Code Playgroud)

请注意,我们不必导入fn_fmls. 这是因为,类似的命名只是为了方便起见,因为fn_fmls是一个检索函数形式参数的函数,因此命名一个函数来替换函数 的形式参数是合乎逻辑的fn_fmls<-,因为它将被写为fn_fmls(fn) <- value