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 vergleichen

Bei der Untersuchung der verschiedenen Methoden stellte ich jedoch eine Diskrepanz zwischen den drei Methoden fest (Wrapping inexpressioneinwickelnquoteoder gar nicht einwickeln)

Die Frage ist:
Warum die Diskrepanz?
(Es scheint, dass das Einwickelnquote bewertet den Anruf nicht.)

BEISPIEL:
# 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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage