4

関数呼び出しで指定されていない評価された数式から関数の引数を取得する方法はありますか?

たとえば、呼び出しを考えてみましょうseq(1, 10)。最初の引数を取得したい場合は、 を使用quote()して単純に使用できますquote(seq(1,10))[[1]]。ただし、これは、関数呼び出しで引数が (デフォルト値を持つのではなく) 定義されていて、その正確な位置を知る必要がある場合にのみ機能します。

この例では、ステートメントの長いリストを使用せずにby引数を取得して、定義されているかどうかを確認する方法はありますか?seq(1, 10)if

4

1 に答える 1

8

最初に注意すべきことは、後に続くすべての名前付き引数 ( fromtobyなど) は、 へseq.default()の呼び出しによってディスパッチされるメソッドseq()であり、それ自体ではないということseq()です。(seq()それ自体は 1 つの形式のみを持ちます...)。

そこから、これら 2 つのビルディング ブロックを使用できます。

## (1) Retrieves pairlist of all formals
formals(seq.default)
# [long pairlist object omitted to save space]

## (2) Matches supplied arguments to formals
match.call(definition = seq.default, call = quote(seq.default(1,10)))
# seq.default(from = 1, to = 10)

このようなことをする:

modifyList(formals(seq.default),
           as.list(match.call(seq.default, quote(seq.default(1,10))))[-1])
# $from
# [1] 1
# 
# $to
# [1] 10
# 
# $by
# ((to - from)/(length.out - 1))
# 
# $length.out
# NULL
# 
# $along.with
# NULL
# 
# $...
于 2013-06-10T16:29:53.013 に答える