I am trying to measure the computation time of a function in R using system.time()
.
I want to run the function a few hundred times to get an average bu开发者_高级运维t I don't want
to copy and paste that many times. Is there an easier way to do that?
The microbenchmark package takes a ,times=
option and has the added bonus of being a bit more accurate.
> library(microbenchmark)
> m <- microbenchmark( seq(10)^2, (1:10)^2, times=10000)
> m
Unit: nanoseconds
expr min lq median uq max
1 (1:10)^2 2567 3423 3423 4278 41918
2 seq(10)^2 44484 46195 46195 47051 1804147
> plot(m)
And using the not-yet-released autoplot() method for ggplot2:
autoplot(m)
system.time(replicate ( ... stuff ..) )
Or: (hey, I'm not ashamed to have the same answer as Dirk.)
require(rbenchmark)
benchmark( stuff... ) # Nice for comparative work
You want to use the rbenchmark package and its function benchmark()
which does just about everything for you.
Here is the first example from its help page:
R> example(benchmark)
bnchmrR> # example 1
bnchmrR> # benchmark the allocation of one 10^6-element numeric vector,
bnchmrR> # replicated 100 times
bnchmrR> benchmark(1:10^6)
test replications elapsed relative user.self sys.self user.child sys.child
1 1:10^6 100 0.327 1 0.33 0 0 0
For truly expression-level benchmarking, there is also the microbenchmark package.
精彩评论