R получить имена аргументов из вызова функции - PullRequest
0 голосов
/ 28 мая 2018

Я хотел бы получить имена аргументов из вызова функции:

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 ]

0 голосов
/ 28 мая 2018

Используя тот же formalArgs, предложенный @Akrun (а также в почти дублированном Получите имена аргументов функции R ):

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

substitute(value) цитируетвход, чтобы предотвратить немедленную оценку, [[1]] извлекает функцию из проанализированного ввода, deparse превращает ее в character (поскольку formalArgs может принимать имя функции как character).

getArgNames(testFun())

#[1] "x" "z"
0 голосов
/ 28 мая 2018

Мы можем использовать 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
...