的参数名对于任意函数获取的R功能
f <- function(x, y = 3){
z <- x + y
z^2
}
我希望能够采取的f
> argument_names(f)
[1] "x" "y"
参数名这可能吗?
的参数名对于任意函数获取的R功能
f <- function(x, y = 3){
z <- x + y
z^2
}
我希望能够采取的f
> argument_names(f)
[1] "x" "y"
参数名这可能吗?
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
,如果你只是想在参数的名称,你可以使用的名称,如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"
这不适用于例如'^'或'log':\ – MichaelChirico
@MichaelChiricoHmmm。看起来像任何只是一个.primitive调用的包装都有同样的问题。 – Dason
是啊我试图找到所有基于一个参数的功能,并遇到了这个问题 - 所有好的只是原始包装 – MichaelChirico
退房'?formals' – Dason
太棒了!两者都有效。随时回答。我会接受第一个。 – landau
帮助(“args”)或其中的一个功能。 – Roland