gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 14:42:38 25 4
gpt4 key购买 nike

我有一个带有函数的包 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 ... 来记录这个函数。以便在我的 NAMESPACE 中声明这些函数。但是,是否包含 fn_flms还有处理 fn_fmls<-的申报?还是也需要单独包含?如果是这样,如何? @importFrom rlang fn_fmls<- ? "fn_fmls()<-" ?

最佳答案

fn_fmls<-是一个完全独立的函数,一个被称为 replacement function 的例子,您可以在链接中阅读更多相关信息。要点是它必须采用 function_name<- 的形式, 并始终返回其第一个参数的修改版本。

我们可以在rlang中看到fn_fmls<- 的文档接受两个参数,fnvalue .该函数用于替换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 .

关于r - 是否需要在 NAMESPACE 中声明属性赋值运算符?如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61215382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com