Benchmarking: usando `expression`` quote` ou nenhum dos dois

Geralmente, quando eu executo benchmarks, eu envolvo minhas declaraçõesexpression. Recentemente, foi sugerido para (a) não fazê-lo ou (b) usarquote em vez de expressão.

Eu acho duas vantagens para envolver as declarações:

em comparação com declarações inteiras, elas são mais facilmente trocadas.Eu posso lapidar uma lista de entradas e comparar esses resultados

No entanto, ao explorar os diferentes métodos, notei uma discrepância entre os três métodos (envolvendoexpressionembrulhandoquote, ou não embrulhando de jeito nenhum)

A questão é:
Por que a discrepância?
(parece que embrulhandoquote não avalia realmente a chamada.)

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

questionAnswers(1)

yourAnswerToTheQuestion