在 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】:
更类似于tic
和toc
,有时更方便,例如对于循环中的状态消息:
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. 内置函数,无需加载tictoc
、rbenchmark
等库。【参考方案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
【讨论】:
可以使用purrr
和log.st %>% map_df(~as_data_frame(.x)) %>% mutate(elapsed=toc-tic)
将结果更优雅地转换为数据框
谢谢,@HolgerBrandl。代码中的小修正:library(tidyverse); log.lst %>% map_df(~as.data.frame(.x)) %>% mutate(elapsed=toc-tic)
以上是关于在 R 中存储 tic toc 值的主要内容,如果未能解决你的问题,请参考以下文章
是否可以像在 Matlab 中一样在 Julia 中嵌套 tic() 和 toc() ?如果不是,那么解决方法是啥?