7

我正在寻找一种将运行时间存储在 R 中的变量中的方法。在 MATLAB 中,可以执行以下操作:

抽动;
...
x=toc;

然后将运行时间存储在变量 x 中。我尝试使用来自 MATLAB 包的 R 中的 tic() toc() 函数做同样的事情,但没有成功。此外,我也看不到如何使用 R 的 system.time() 函数来做到这一点。非常感谢这里的任何帮助。

4

4 回答 4

15

更类似于tic并且toc有时更方便,例如循环中的状态消息:

start <- Sys.time ()
do.something ()
Sys.time () - start
于 2012-06-05T10:28:15.820 回答
14

使用内置system.time函数:

tm1 <- system.time(
{
  #your code here
})

或者,或者包中的benchmark函数rbenchmark

tm2 <- benchmark(
{
  #your code here
}, replications=1)
于 2012-06-05T08:06:38.850 回答
4

或者您可以按照“tictoc”包中的说明进行操作。

tic("timer")
1+1
toc(log = TRUE, quiet = TRUE)
log.txt <- tic.log(format = TRUE)
tic.clearlog()

然后将您的输出存储在 log.txt 中。如果您只想要以秒为单位的时间,您可以unlist(log.txt)将其作为字符串进行分析。

干杯,

于 2017-06-15T11:44:58.377 回答
2

tictoc包实现这个确切的功能,因此顺序或嵌套时序的时序存储在一个列表中并用于后续分析。

例如,要对循环的每次迭代进行计时并稍后分析结果,请使用该log功能。

library(tictoc)
tic.clearlog()
for (x in 1:10) {
    # passing x to tic() makes it a label at time of the matching toc() call.
    tic(x)
    Sys.sleep(1)
    # When log = TRUE, toc() pushes the measured timing to a list
    # quiet = TRUE prevents from printing the timing
    toc(log = TRUE, quiet = TRUE)
}

获取toc()格式化文本的结果以进行打印。

log.txt <- tic.log(format = TRUE)

以原始格式提取包含测量值的列表。

log.lst <- tic.log(format = FALSE)

由于数据已经提取,请清除 tictoc 日志。

tic.clearlog()

将列表元素转换为计时。列表的每个元素都有一个开始 ( tic) 和结束 ( toc) 时间戳。

timings <- unlist(lapply(log.lst, function(x) x$toc - x$tic))

计算平均循环时间。

mean(timings)
# [1] 1.001

打印文本输出 - 请注意前缀是x.

writeLines(unlist(log.txt))
# 1: 1.002 sec elapsed
# 2: 1 sec elapsed
# 3: 1.002 sec elapsed
# 4: 1.001 sec elapsed
# 5: 1.001 sec elapsed
# 6: 1.001 sec elapsed
# 7: 1.001 sec elapsed
# 8: 1.001 sec elapsed
# 9: 1.001 sec elapsed
# 10: 1 sec elapsed
于 2017-12-23T16:22:19.443 回答