R:捕获函数调用的预先指定的参数

R: Capture prespecified arguments of a function call

我需要捕获函数调用的预先指定参数。这对于通过 rlang::list2(...) 未指定的人来说似乎很容易,但对于指定的人来说更难("specified" 意思是在函数的形式中定义)。

我已经尝试了 base::match.callhttps://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

如果您想将所有命名参数捕获到您的函数中,您可以使用 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())
}