web-dev-qa-db-ja.com

R関数の引数名を取得します

任意の関数の場合

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

fの引数名を取得できるようにしたい

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

これは可能ですか?

15
landau

formalArgsformalsは、この場合に役立つ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"
_
20
Dason