2016-04-10 14 views
1

任意の関数のパラメータとそれぞれのデフォルト値を抽出する方法はありますか?以外の関数?例えば任意の関数から関数のパラメータとデフォルト値を抽出する

、与えられた:

myfunc <- function(a, b = 1) { print(c(a, b)) } 

を私が返されますいくつかの機能を探しています:

list(a = NULL, b = 1) 

またはそれらのいくつかのバリエーション。

+0

なぜ引数 "a"に 'NULL'を使用しますか? 'function(a、b = 1、c = NULL)の結果はどうなるでしょうか? –

答えて

2

あなたはformals()を探しています。

formals(myfunc) 
# $a 
# 
# 
# $b 
# [1] 1 

あなたがaためNULLを必要とする場合は、いくつかのチェックを行うことができます。 aは「名前」クラスになり、空になります。

lapply(formals(myfunc), function(x) if(is.name(x) & !nzchar(x)) NULL else x) 
# $a 
# NULL 
# 
# $b 
# [1] 1 
+0

あなたは "空"と呼んでいるものを検出するために 'missing(x)'を使うことができました。論理を返します。私は 'is.null'を最初に試してみたところ、エラーが出ていると推測していますが、' missing'はその引数を評価しようとしません。 –

+0

@ 42- - どういう意味ですか? 'lapply(formals(myfunc)、function(x)missing(x))'を実行すると、私は両方に対してFALSEになります。 'a'は実際にはnullではなく、' '' '' –

+0

'myfunc < - function(a、b = 1){print(missing(a))}のため、' is.null() 'もFALSEを返します。 ; myfunc(); #TRUE'それはNULLではないと約束しました。 'missing 'は関数の中で意味を持ち、' ​​lapply'で形式を渡すことで同じ情報が得られるとは思わない。 'missing'を' is.null'に変更して実行すると、代わりにTRUEではなくエラーが発生します。 –

関連する問題