代码之家  ›  专栏  ›  技术社区  ›  Rappster

检查任意函数调用中是否有多个缺少的参数

  •  0
  • Rappster  · 技术社区  · 7 年前

    是否有conciser通用方法通过 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
    

    于2014年1月1日由 reprex package (v0.2.1)

    0 回复  |  直到 7 年前
        1
  •  1
  •   Artem Sokolov    7 年前

    你想要 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 )
    }
    

    不确定它是否真的比你原来的版本更简洁。;)