测量R中的函数执行时间

测量函数执行时间R中是否有标准化的方法?

显然我可以在执行之前和之后采取system.time ,然后把这些差异,但我想知道是否有一些标准化的方式或function(不想发明车轮)。


我似乎记得我曾经使用过如下的东西:

 somesysfunction("myfunction(with,arguments)") > Start time : 2001-01-01 00:00:00 # output of somesysfunction > "Result" "of" "myfunction" # output of myfunction > End time : 2001-01-01 00:00:10 # output of somesysfunction > Total Execution time : 10 seconds # output of somesysfunction 

另一种可能的方法是使用Sys.time():

 start.time <- Sys.time() ...Relevent codes... end.time <- Sys.time() time.taken <- end.time - start.time time.taken 

与上面的答案相比,不是最优雅的方法,但绝对是一种方法。

内置的函数system.time()将做到这一点。

使用像: system.time(result <- myfunction(with, arguments))

正如Andrie所说, system.time()工作正常。 对于简短的function,我更喜欢把replicate()放在里面:

 system.time( replicate(10000, myfunction(with,arguments) ) ) 

测量执行时间的更好方法是使用rbenchmark软件包。 这个软件包(很容易)允许您指定复制testing的次数,相对基准testing应该是多less次。

另请参阅stats.stackexchange上的相关问题

还有proc.time()

您可以使用与Sys.time相同的方式,但它会给您一个类似于system.time结果。

 ptm <- proc.time() #your function here proc.time() - ptm 

使用的主要区别

 system.time({ #your function here }) 

proc.time()方法仍然执行你的函数,而不仅仅是测量时间…顺便说一句,我喜欢在里面使用system.time ,所以你可以把一组东西… …

“tictoc”包给你一个非常简单的测量执行时间的方法。 文档位于: https : //cran.fhcrc.org/web/packages/tictoc/tictoc.pdf 。

 install.packages("tictoc") require(tictoc) tic() rnorm(1000,0,1) toc() 

要将已用时间保存到variables中,您可以执行以下操作:

 install.packages("tictoc") require(tictoc) tic() rnorm(1000,0,1) exectime <- toc() exectime <- exectime$toc - exectime$tic 

如果你愿意的话,你可以使用MATLAB风格的tictoc函数。 看到这个其他的问题

R中的秒表function

尽pipe其他解决scheme对于单个函数是有用的,但我推荐使用下面的一些代码来更加通用和有效:

 Rprof ( tf <- "log.log", memory.profiling = TRUE ) your code must be in between Rprof ( NULL ) ; print ( summaryRprof ( tf ) ) 

microbenchmark是一个轻量级(〜50kB)的软件包,在R中用于标准化多个expression式和函数的标准方式是:

 microbenchmark(myfunction(with,arguments)) 

例如:

 > microbenchmark::microbenchmark(log10(5), log(5)/log(10), times = 10000) Unit: nanoseconds expr min lq mean median uq max neval cld log10(5) 0 0 25.5738 0 1 10265 10000 a log(5)/log(10) 0 0 28.1838 0 1 10265 10000 

在这两个expression评估10000次,平均执行大约20-30ms。