R の関数の引数の数を得る


args 関数を使うことで,関数の引数リストを取得することができます。

args(sqrt)

ここで得られる結果はクロージャオブジェクトなので, formals 関数により,リストオブジェクトにすることができます。

formals(args(sqrt))

リストなので, length 関数により引数の数を得ることができます[A]

length(formals(args(sqrt)))

これを用いて,例えば,特定の名前空間に存在するすべての関数の引数の数を取得したい場合は次のようにできます。

e <- asNamespace("stats")
exports <- sapply(ls(envir=e), get, envir=e)
functions <- exports[sapply(exports, is.function)]
sapply(functions, function(f) length(formals(args(f))))

結果は stats 名前空間に公開された関数の引数の個数の名前付きベクトルです。ジェネリック関数のように重複もありますが,これで引数の個数の分布を調べても面白いと思います。

脚注

  1. ただし, ... は 1 つの引数として扱われます。 []