在 R 中存储 tic toc 值

Posted

技术标签:

【中文标题】在 R 中存储 tic toc 值【英文标题】:Storing tic toc values in R 【发布时间】:2012-06-05 07:57:55 【问题描述】:

我正在寻找一种将运行时间存储在 R 中的变量中的方法。在 MATLAB 中,人们可以这样做:

抽动; ... x=toc;

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

【问题讨论】:

重复问题:***.com/questions/1716012/stopwatch-function-in-r @VincentZoonekynd:我在问如何存储它。 @StefanHansen:存储它就像存储任何其他变量值一样...<- 【参考方案1】:

更类似于tictoc,有时更方便,例如对于循环中的状态消息:

start <- Sys.time ()
do.something ()
Sys.time () - start

【讨论】:

【参考方案2】:

使用内置的system.time函数:

tm1 <- system.time(

  #your code here
)

或者,或者来自rbenchmark 包的benchmark 函数:

tm2 <- benchmark(

  #your code here
, replications=1)

【讨论】:

哦,就是这么简单。谢谢:) 我更喜欢使用system.time函数,因为: 1.它封装了我要计时的代码; 2. 内置函数,无需加载tictocrbenchmark等库。【参考方案3】:

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

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

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

干杯,

【讨论】:

【参考方案4】:

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

【讨论】:

可以使用purrrlog.st %&gt;% map_df(~as_data_frame(.x)) %&gt;% mutate(elapsed=toc-tic) 将结果更优雅地转换为数据框 谢谢,@HolgerBrandl。代码中的小修正:library(tidyverse); log.lst %&gt;% map_df(~as.data.frame(.x)) %&gt;% mutate(elapsed=toc-tic)

以上是关于在 R 中存储 tic toc 值的主要内容,如果未能解决你的问题,请参考以下文章

Matlab中tic和toc用法

是否可以像在 Matlab 中一样在 Julia 中嵌套 tic() 和 toc() ?如果不是,那么解决方法是啥?

[T-ARA][Tic Tic Toc]

MATLAB tic-toc以Minutes格式生成

Matlab 的 tic 和 toc 函数的 Python 等价物是啥?

什么是Matlab的tic和toc函数的Python等价物?