Benchmarking: mit `expression`` quote` oder ohne
Im Allgemeinen fasse ich meine Aussagen ein, wenn ich Benchmarks durchführeexpression
. Kürzlich wurde vorgeschlagen, entweder (a) dies nicht zu tun oder (b) zu verwendenquote
statt Ausdruck.
Ich finde zwei Vorteile, wenn ich die Anweisungen einpacke:
im vergleich zu ganzen aussagen lassen sie sich leichter austauschen.Ich kann eine Liste von Eingaben überfliegen und diese Ergebnisse vergleichenBei der Untersuchung der verschiedenen Methoden stellte ich jedoch eine Diskrepanz zwischen den drei Methoden fest (Wrapping inexpression
einwickelnquote
oder gar nicht einwickeln)
Die Frage ist:
Warum die Diskrepanz?
(Es scheint, dass das Einwickelnquote
bewertet den Anruf nicht.)
# 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