我一直对缺乏准确性有些迷惑,我看到system.time
和rbenchmark
(因为时间的精度可能不足),并看到Hadley最近参考了microbenchmark
包。所以我决定给它一个旋转,如下所示。我将mean
与f <- function(x) {sum(x)/length(x)}
对齐,预计mean
比f
做得更好,但据我了解,结果并不表明这是真的。意想不到的结果:microbenchmark
- 我误解了结果吗?
- f实际上是否比平均速度更快?
- microbenchmark仍处于测试阶段,这需要熨烫 了吗?
我在赢得7台机器上运行R2.15(因为microbenchmark的定时不同,具体取决于您的操作系统)。
结果
Unit: microseconds
expr min lq median uq max
1 f(x) 19.130 20.529 20.529 20.996 286.00
2 mean(x) 28.927 29.860 30.327 30.327 672.31
守则
library(microbenchmark)
x <- 1:10000
f <- function(x) {sum(x)/length(x)}
mean(x)
res <- microbenchmark(
mean(x),
f(x),
times=1000L)
print(res)
boxplot(res)
我喜欢'microbenchmark'。如果你做的不止一个或两个结果,绘图可以帮助很大,但是在丑陋的一面,默认输出是一点点。我为ggplot2写了一个autoplot函数,可能会在其中一个版本中显示(同时检查github)。示例:http://stackoverflow.com/a/6919493/636656 – 2012-04-28 16:52:09
这可能解释它http://radfordneal.wordpress.com/2014/02/02/inaccurate-results-from-microbenchmark/ – Momo 2014-02-02 23:31:56
可能不是所有的统计数据'f'较低,散点图也表明了这一点。乔兰钉了这一个。 – 2014-02-03 02:21:01