2016-11-16 33 views
5

的参数名对于任意函数获取的R功能

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

我希望能够采取的f

> argument_names(f) 
[1] "x" "y" 

参数名这可能吗?

+3

退房'?formals' – Dason

+0

太棒了!两者都有效。随时回答。我会接受第一个。 – landau

+0

帮助(“args”)或其中的一个功能。 – Roland

回答

10

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

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

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


$y 
[1] 3 

我的第一个倾向是只是建议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" 
+0

这不适用于例如'^'或'log':\ – MichaelChirico

+0

@MichaelChiricoHmmm。看起来像任何只是一个.primitive调用的包装都有同样的问题。 – Dason

+0

是啊我试图找到所有基于一个参数的功能,并遇到了这个问题 - 所有好的只是原始包装 – MichaelChirico