微基准
Microbenchmark 可用于估算其他快速程序的时间。例如,考虑估计打印 hello world 所花费的时间。
system.time(print("hello world"))
# [1] "hello world"
# user system elapsed
# 0 0 0
这是因为 system.time
本质上是 proc.time
的包装函数,它以秒为单位测量。由于打印 hello world
不到一秒钟,所以花费的时间不到一秒,但事实并非如此。要看到这个,我们可以使用包 microbenchmark:
library(microbenchmark)
microbenchmark(print("hello world"))
# Unit: microseconds
# expr min lq mean median uq max neval
# print("hello world") 26.336 29.984 44.11637 44.6835 45.415 158.824 100
在运行 print("hello world")
100 次之后我们可以看到,平均花费的时间实际上是 44 微秒。 (请注意,运行此代码将在控制台上打印 hello world
100 次。)
我们可以将它与一个等效的程序 cat("hello world\n")
进行比较,看看它是否比 print("hello world")
更快:
microbenchmark(cat("hello world\n"))
# Unit: microseconds
# expr min lq mean median uq max neval
# cat("hello world\\n") 14.093 17.6975 23.73829 19.319 20.996 119.382 100
在这种情况下,cat()
几乎是 print()
的两倍。
或者,可以比较同一 microbenchmark
调用中的两个过程:
microbenchmark(print("hello world"), cat("hello world\n"))
# Unit: microseconds
# expr min lq mean median uq max neval
# print("hello world") 29.122 31.654 39.64255 34.5275 38.852 192.779 100
# cat("hello world\\n") 9.381 12.356 13.83820 12.9930 13.715 52.564 100