Benchmarking: używanie `expression`` quote` lub żadnego z nich
Zasadniczo, gdy uruchamiam testy porównawcze, zawijam swoje oświadczeniaexpression
. Ostatnio zasugerowano, aby (a) tego nie robić lub (b) używaćquote
zamiast wyrazu.
Zawijanie stwierdzeń ma dwie zalety:
w porównaniu z całymi stwierdzeniami łatwiej je wymienić.Mogę przejrzeć listę danych wejściowych i porównać te wynikiJednak badając różne metody, zauważyłem rozbieżność między tymi trzema metodami (zawijanieexpression
, owijając sięquote
lub wcale nie owijać)
Pytanie brzmi:
Dlaczego ta rozbieżność?
(wydaje się, że zawijaniequote
nie ocenia połączenia.)
# 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