测量R中的功能执行时间

时间:2011-06-07 07:55:53

标签: r time profiling

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

显然我可以在执行前后执行system.time,然后区分这些,但我想知道是否有一些标准化的方法或功能(想要不发明轮子)。


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

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

11 个答案:

答案 0 :(得分:223)

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

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

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

答案 1 :(得分:164)

内置函数system.time()可以执行此操作。

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

答案 2 :(得分:55)

Andrie说,system.time()工作正常。对于简短的功能,我更喜欢将replicate()放入其中:

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

答案 3 :(得分:36)

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

请参阅stats.stackexchange

上的相关问题

答案 4 :(得分:29)

还有proc.time()

您可以使用与Sys.time相同的方式,但它会为system.time提供类似的结果。

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

使用

之间的主要区别
system.time({ #your function here })

proc.time()方法仍然执行你的功能,而不仅仅是测量时间...... 顺便说一句,我喜欢在system.time内使用{},这样你就可以放一套东西......

答案 5 :(得分:24)

microbenchmark是一个轻量级(~50kB)的包,在R中或多或少是标准方式,用于对多个表达式和函数进行基准测试:

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

这两个表达式都被评估了10000次,平均执行时间约为25-30 ns。

答案 6 :(得分:22)

“tictoc”软件包为您提供了一种测量执行时间的简单方法。文档位于:https://cran.fhcrc.org/web/packages/tictoc/tictoc.pdf

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

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

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

答案 7 :(得分:15)

虽然其他解决方案对单个函数很有用,但我推荐以下一段更通用,更有效的代码:

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

答案 8 :(得分:11)

如果您愿意,可以使用MATLAB风格的tic - toc函数。看到这个其他的问题

Stopwatch function in R

答案 9 :(得分:9)

另一种简单但非常强大的方法是使用包getElementsByTagName('properties')。它不仅可以测量代码的执行时间,还可以深入了解您执行的每个函数。它也可以用于Shiny。

profvis

点击here以获取一些示例。

答案 10 :(得分:3)

您可以使用 Sys.time()。但是,当您在表格或 csv 文件中记录时差时,不能简单地说 end - start。相反,您应该定义单位:

f_name <- function (args*){
start <- Sys.time()
""" You codes here """
end <- Sys.time()
total_time <- as.numeric (end - start, units = "mins") # or secs ... 
}

然后您可以使用具有正确格式的 total_time