通常、ベンチマークを実行するときは、ステートメントを で囲みますexpression
。最近、(a) そうしないか、(b)quote
式の代わりに使用することが提案されました。
ステートメントをラップすることには、次の 2 つの利点があります。
- ステートメント全体と比較すると、より簡単に交換できます。
- 入力のリストを重ねて、それらの結果を比較できます
expression
しかし、さまざまな方法を調べているうちに、3 つの方法 ( でラップする、 でラップするquote
、またはまったくラップしない)の間に矛盾があることに気付きました。
問題は
、なぜ不一致なのかということです。
(ラップインquote
は実際には呼び出しを評価しないようです。)
例:
# SAMPLE DATA
mat <- matrix(sample(seq(1e6), 4^2*1e4, T), ncol=400)
# RAW EXPRESSION TO BENCHMARK IS:
# apply(mat, 2, mean)
# WRAPPED EXPRESSION:
expr <- expression(apply(mat, 2, mean))
quot <- quote(apply(mat, 2, mean))
# BENCHMARKS
benchmark(raw=apply(mat, 2, mean), expr, quot)[, -(7:8)]
# test replications elapsed relative user.self sys.self
# 2 expr 100 1.269 NA 1.256 0.019
# 3 quot 100 0.000 NA 0.001 0.000
# 1 raw 100 1.494 NA 1.286 0.021
# BENCHMARKED INDIVIDUALLY
benchmark(raw=apply(mat, 2, mean))[, -(7:8)]
benchmark(expr)[, -(7:8)]
benchmark(quot)[, -(7:8)]
# results
# test replications elapsed relative user.self sys.self
# 1 raw 100 1.274 1 1.26 0.018
# test replications elapsed relative user.self sys.self
# 1 expr 100 1.476 1 1.342 0.021
# test replications elapsed relative user.self sys.self
# 1 quot 100 0.006 1 0.006 0.001