R:捕获函数调用的预先指定的参数
R: Capture prespecified arguments of a function call
我需要捕获函数调用的预先指定参数。这对于通过 rlang::list2(...)
未指定的人来说似乎很容易,但对于指定的人来说更难("specified" 意思是在函数的形式中定义)。
我已经尝试了 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
如果您想将所有命名参数捕获到您的函数中,您可以使用 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())
}
我需要捕获函数调用的预先指定参数。这对于通过 rlang::list2(...)
未指定的人来说似乎很容易,但对于指定的人来说更难("specified" 意思是在函数的形式中定义)。
我已经尝试了 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
如果您想将所有命名参数捕获到您的函数中,您可以使用 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())
}