代码之家  ›  专栏  ›  技术社区  ›  Taz jason

r从函数调用中获取参数名

  •  2
  • Taz jason  · 技术社区  · 7 年前

    我想从函数调用中获取参数名:

    testFun <- function(x = 1:20, z = list(a = 1, b = 2)) x %>% sin %>% sum
    
    getArgNames <- function(value) {
      # function should return all arguments names - in this case c("x", "z")
    
    }
    arg.names <- getArgNames(testFun())
    

    在获取参数名之前不要对函数进行计算,这一点很重要。有什么想法吗?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Aurèle    7 年前

    使用相同的 formalArgs 由@akrun建议(也是几乎重复的 Get the argument names of an R function ):

    getArgNames <- function(value) formalArgs(deparse(substitute(value)[[1]]))
    

    substitute(value) 引用输入,以防止立即评估, [[1]] 从解析的输入中检索函数, deparse 把它变成 character (自 聚甲醛 可以将函数名作为 性格 )

    getArgNames(testFun())
    
    #[1] "x" "z"
    
        2
  •  1
  •   akrun    7 年前

    我们可以用 formalArgs

    formalArgs(testFun)
    #[1] "x" "z"
    

    如果我们需要将参数作为可执行函数传递

    library(rlang)
    getArgNames <- function(value) {
         v1 <- enquo(value)
         args <- formalArgs(get(gsub("[()]", "", quo_name(v1))))
         list(args, value)
         }
    
    getArgNames(testFun())
    #[[1]]
    #[1] "x" "z"
    
    #[[2]]
    #[1] 0.9982219