Проверьте наличие нескольких отсутствующих аргументов при вызове произвольной функции - PullRequest
0 голосов
/ 14 января 2019

Существует ли краткий универсальный способ проверки пропущенных аргументов в вызове функции через 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

Создано в 2019-01-14 пакетом представ (v0.2.1)

1 Ответ

0 голосов
/ 12 марта 2019

Вы хотите 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 )
}

Не уверен, что он действительно более краткий, чем ваша оригинальная версия. ;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...