2016-11-16 7 views
5

の引数名に私は<code>f</code></p> <pre><code>> argument_names(f) [1] "x" "y" </code></pre> <p>の引数名をできる取ることにしたい任意の関数についてはR機能

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

を取得することができ、このですか?

+3

チェックアウトは '?恐ろしい – Dason

+0

をformals'!どちらも動作します。お気軽にお答えください。私は最初を受け入れます。 – landau

+0

help( "args")またはそこにリンクされている関数の1つ。 – Roland

答えて

10

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を返します。その周りの方法は、formalArgsに渡す前に、まずargsに関数をラップすることです。これは、関数がプリミティブであるかどうかに関係なく機能します。

> # 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" 
+0

これは、例えば '^'や 'log'に対しては機能しません:\ – MichaelChirico

+0

@MichaelChirico Hmmm。 .primitive呼び出しの単なるラッパーであるようなものは、同じ問題を抱えています。 – Dason

+0

確かに私は基底で1つの引数の関数をすべて見つけようとしていて、この問題に遭遇しました - すべての良いものは基本的なラッパーです – MichaelChirico

関連する問題

 関連する問題