是否有一种简洁的通用方法来通过rlang
功能检查函数调用中缺少的参数?
我不喜欢rlang::call_frame()$env %>% as.list()
部分,但是无法使用,例如rlang::fn_fmls()
或rlang::call_args()
library(magrittr)
foo <- function(a, b) {
rlang::call_frame()$env %>%
as.list() %>%
purrr::map_lgl(rlang::is_missing)
}
foo()
#> a b
#> TRUE TRUE
foo(1)
#> a b
#> FALSE TRUE
foo(1, 2)
#> a b
#> FALSE FALSE
foo(b = 2)
#> a b
#> TRUE FALSE
由reprex package(v0.2.1)于2019-01-14创建
答案 0 :(得分:1)
您需要rlang::fn_fmls_syms()
,它以符号形式返回形式参数列表。通过enexprs
将它们直接传递到do.call
,以检索用户为每个参数提供的表达式:
foo <- function( a, b ) {
do.call( rlang::enexprs, rlang::fn_fmls_syms() ) %>%
purrr::map_lgl( rlang::is_missing )
}
不确定它是否真的比原始版本更简洁。 ;)