任意の関数の場合
f <- function(x, y = 3){
z <- x + y
z^2
}
f
の引数名を取得できるようにしたい
> argument_names(f)
[1] "x" "y"
これは可能ですか?
formalArgs
とformals
は、この場合に役立つ2つの関数です。パラメータ名だけが必要な場合は、名前を指定するだけでデフォルトを無視するため、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"
_