2017-03-25 4 views
0

私は、位置的に使用する予定の関数に対して、無制限の名前付き引数リストを持っています。ベンチマークに提供される引数を使って自分の与えられた機能をマイクロベンチマーク:どうやってマイクロベンチマーク:: microbenchmarkは、異なる引数を持つ同じ関数をプログラムで実装できますか?

function(method) { 
    if (identical(method, "method1")) {Sys.sleep(1); return(NULL)} 
    if (identical(method, "method2")) {Sys.sleep(2); return(NULL)} 
    Sys.sleep(nchar(method)) 
    return(NULL) 
} 

どのようにパッケージを使用することができますと

list(
    method1 = "method1", 
    method2 = "method2", 
    ..., 
    methodn = "methodn" 
) 

?ポジション引数としてベンチマーク自体に名前が付けられている場合、ボーナスポイントはソースリストに名前が付けられます。

パッケージのプライム:マイクロベンチマークの使用私は、ベンチマーク対象のタスクがドットで指定されているところを散見しています。未評価の式を評価するには、引数listを使用できます。それはプログラム的な使用のための正しいルートのようだ。しかし、expression()は括弧の内部をリテラルとして扱うため、expression()の中に引数を挿入する方法は見つけられませんでした。私はparse()を使って暗い道を歩き、それを稼働させましたが、より良い道がなければならないようです。

答えて

0

catとsprintfをforループで使用する方法がありますが、パラメータの組み合わせが多い場合は問題になることがあります。

cat("res <- microbenchmark(\n") 
for (i in 1:4){ 
    for (j in 1:4) { 
    cat(sprintf("f_%i_%i = f(%i, %i),\n", i, j, i, j)) 
    } 
} 
cat(")\n") 

次に、コードをコピーして実行します(最後から2番目の行からカンマを削除します)。

関連する問題