離散イベント シミュレーションにいくつかのルールしかない場合、これは重要ではありませんが、多数のルールがあり、それらが互いに干渉する可能性がある場合は、それらが「どの」「どこで」使用されているかを追跡する必要があります。
- 以下のコードを元の関数と同じくらい速く取得する方法を知っている人はいますか?
- よりも優れたオプションはあります
eval(parse(...)
か?
これは、速度が 100 倍低下することを示す簡単な例です。シミュレーションを実行し、(多数のルールのうちの) 1 つが次のとおりであると仮定します。時間が 5 未満の状態を選択します。
> a <- rnorm(100, 50, 10)
> print(summary(microbenchmark::microbenchmark(a[a < 5], times = 1000L, unit = "us")))
expr min lq mean median uq max neval
a[a < 5] 0.76 1.14 1.266745 1.141 1.52 11.404 1000
myfun <- function(a0) {
return(eval(parse(text = myrule)))
}
> myrule <- "a < a0" # The rule could be read from a file.
print(summary(microbenchmark::microbenchmark(a[myfun(5)], times = 1000L, unit = "us")))
expr min lq mean median uq max neval
a[myfun(5)] 137.61 140.271 145.6047 141.411 142.932 343.644 1000
注:ブックキーピングを効率的に行うことができる追加のrete パッケージは必要ないと思います。でも、違う意見があれば教えて...