获取R函数的参数名称

lan*_*dau 14 expression r function non-standard-evaluation

对于任意函数

f <- function(x, y = 3){
  z <- x + y
  z^2
}
Run Code Online (Sandbox Code Playgroud)

我希望能够采用参数名称 f

> argument_names(f)
[1] "x" "y"
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Das*_*son 20

formalArgs并且formals是在这种情况下有用的两个函数.如果您只是想要参数名称,那么formalArgs它将更有用,因为它只是给出名称并忽略任何默认值. formals给出一个列表作为输出,并提供参数名称作为列表中元素的名称,默认值为元素的值.

f <- function(x, y = 3){
  z <- x + y
  z^2
}

> formalArgs(f)
[1] "x" "y"
> formals(f)
$x


$y
[1] 3
Run Code Online (Sandbox Code Playgroud)

我的第一个倾向是建议formals,如果你只是想要参数的名称,你可以使用像names(formals(f)).该formalArgs函数只是一个包装器,为您做到这一点,所以无论哪种方式工作.

编辑:请注意,技术上原始的函数没有"形式",因此如果在基元上使用此方法将返回NULL.解决这个问题的方法是首先将函数包装args在传递之前formalArgs.无论函数是原始的还是非原始的,这都有效.

> # formalArgs will work for non-primitives but not primitives
> formalArgs(f)
[1] "x" "y"
> formalArgs(sum)
NULL
> # But wrapping the function in args first will work in either case
> formalArgs(args(f))
[1] "x" "y"
> formalArgs(args(sum))
[1] "..."   "na.rm"
Run Code Online (Sandbox Code Playgroud)