9

任意の数の引数を持つ関数がある場合があります。例えば、bootstrapPageパッケージの機能はピカピカです。data.frameがあり、1つの行に1つのウィジェットを作成したい場合、data.frameの行番号に従って引数の数を渡すための適切な方法がわかりません。これまでのところ、私はスクリプトを生成し、のトリックを使用しますeval(parse(text="..."))

実際、Rで関数に渡される引数の構造(キーと値)はに似ているlistので、Rで引数をリストとして渡す方法があるかどうか疑問に思っています。

より具体的には、関数fとリストがある場合、の引数の名前と名前、および引数の位置と位置の一致に従ってargvオブジェクトを渡す方法はありargvますか?fargvfargvf

たとえば、

f <- function(a, b) a + b
argv <- list(a=1, b=2)

に相当するをargvどのように渡す必要がありますか?ff(a=argv$a, b=argv$b)

または、次の場合:

f <- function(a, b, ...) { # some codes }
argv <- list(a = 1, b = 2, 3, 4, 5)

に相当するをargvどのように渡す必要がありますか?ff(a=argv$a, b=argv$b, argv[[3]], argv[[4]], argv[[5]])

ありがとう!

4

1 に答える 1

12

あなたが探しているdo.call

do.call(f, argv)

下記は用例です

> args <- list(n = 10, mean = 3, sd = .5)
> do.call(rnorm, args)
 [1] 3.589416 3.393031 2.928506 2.503925 3.316584 2.581787 2.686507 3.178877
 [9] 3.083885 2.821506
> do.call(rnorm, list(10, 3, .5))
 [1] 3.964526 2.838760 2.436684 3.068581 1.842332 3.739046 4.050525 3.097042
 [9] 3.665041 3.535947
> f <- function(a, b) a + b
> argv <- list(a=1, b=2)
> do.call(f, argv)
[1] 3
> f <- function(a, b, ...){print(a);print(b);print(sum(...))}
> argv <- list(a=1,b=2, 3, 4, 5)
> do.call(f, argv)
[1] 1
[1] 2
[1] 12
于 2013-03-09T17:57:09.117 に答える