获取R函数的参数名

获取R函数的参数名,r,function,expression,non-standard-evaluation,R,Function,Expression,Non Standard Evaluation,对于任意函数 f <- function(x, y = 3){ z <- x + y z^2 } 这可能吗?formalArgs和formals是在这种情况下非常有用的两个函数。如果您只需要参数名,那么formalArgs将更有用,因为它只提供名称并忽略任何默认值formals提供一个列表作为输出,并提供参数名称作为列表中元素的名称,默认值作为元素的值 f <- function(x, y = 3){ z <- x + y z^2 } > for

对于任意函数

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

这可能吗?

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

查看
?formals
真棒!两者都有效。请随便回答。我将接受第一个.help(“args”)或其中一个链接的函数。@landau哦,嘿,我认识你。小世界。是的,Dason,我记得你在研究生院。怎么样?李哲远拒绝了他获得最佳答案的机会。想要一些简单的要点吗?@MichaelChirico Hmmm.看起来像是一个简单调用的包装器。原始调用也有同样的问题。是的,我试图在base中找到所有的单参数函数,但遇到了这个问题——所有好的都是原始函数wrappers@MichaelChirico我想我找到了解决办法。从技术上讲,为原语提供NULL并不是一个bug。
formals
的帮助页面上说“只有闭包有formals,而没有基本函数。”这解释了为什么会发生这种情况
args
本身返回一个闭包,这就是为什么“技巧”给了我们想要的。请注意
formals()
也适用于
f(x=1,y=a)
a
是类似
a的对象
f <- function(x, y = 3){
  z <- x + y
  z^2
}

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


$y
[1] 3
> # 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"