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 but I don't want
to copy and paste that many times. Is there an easier way to do that?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
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)
回答2:
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
回答3:
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.