26

任意の関数の場合

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

の引数名を取れるようにしたいf

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

これは可能ですか?

4

1 に答える 1

32

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"
于 2016-11-16T19:19:47.390 に答える