任意の関数の場合
f <- function(x, y = 3){
z <- x + y
z^2
}
の引数名を取れるようにしたいf
> argument_names(f)
[1] "x" "y"
これは可能ですか?
任意の関数の場合
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"