我需要捕获函数调用的预先指定的参数。对于未指定的rlang::list2(...)
来说,这似乎很容易,但是对于指定的对象(在函数的形式中定义的“指定的”含义)来说,难度更大。
我已经尝试过base::match.call
和https://rlang.r-lib.org/reference/index.html#section-calls中的功能,但是还没有成功。
library(rlang)
capture_dots <- function(..., arg1) {
list2(...)
}
capture_dots("abc", arg1 = 1, arg2 = 2)
#> [[1]]
#> [1] "abc"
#>
#> $arg2
#> [1] 2
capture_prespecified("abc", arg1 = 1, arg2 = 2)
#> $arg1
#> [1] 1
答案 0 :(得分:2)
如果要捕获函数的所有命名参数,则可以使用formals()
来获取它们的名称(并过滤掉“ ...”)
capture_dots <- function(..., arg1) {
args <- Filter(function(x) x!="...", names(formals()))
as.list(environment())[args]
}
capture_dots("abc", arg1 = 1, arg2 = 2)
或者,如果您在函数的早期运行它,则点将不会扩展,并且不会有任何其他变量,因此您可以使用
来获取当前环境capture_dots <- function(..., arg1) {
as.list(environment())
}