2013-03-09 15 views
8

何度も引数の数が任意の関数があります。例えば、bootstrapPageは光沢のあるパッケージの機能です。私がdata.frameを持っていて、1行のウィジェットを1つ作成したいのであれば、data.frameの行番号に応じて引数の数を渡すかなりの方法を見つけ出していません。これまでのところ、私はスクリプトを生成し、そのトリックを使用しますeval(parse(text="..."))引数をRのリストに置き換えます

実際、R(キーと値)の関数に渡される引数の構造はlistと似ています。私は機能fとリストargvを持っている場合、

具体R.にリストとして引数を渡し、argvとの名前の一致に従ってfargv内のオブジェクトを渡す方法があります引数の名前はf、位置はargv、引数の位置はfです。例えば、聞かせて

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

にはどうすれf(a=argv$a, b=argv$b)に相当するfargv

を渡す必要がありますか?

それとも我々が持っている場合:

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

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

ありがとうございます!

答えて

11

あなたは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 
+0

ニースのコレクションです。これは「Rへの導入」においてより良い治療を受ける価値のある言語の特徴です。 –

+2

+1の素晴らしい例 –

関連する問題