Matlab R中的秒表功能
是否有类似于MATLAB的R定时器或秒表功能?不存在tic和toc的直接等价物Matlab R中的秒表功能,matlab,r,Matlab,R,是否有类似于MATLAB的R定时器或秒表功能?不存在tic和toc的直接等价物 请参阅帮助(system.time)以及关于评测的R扩展手册。关于评测和评测工具的讨论也在“HPC with R简介”幻灯片中,该幻灯片参考了正如德克所提到的,R中有很多评测工具。如果您想要tic/toc的简单性,那么也可以在R中实现 编辑:我已经从MATLAB软件包中拆掉了垃圾收集功能,tic现在让您选择是对总运行时间感兴趣,还是只对用户时间感兴趣 tic <- function(gcFirst = TRUE
请参阅
帮助(system.time)
以及关于评测的R扩展手册。关于评测和评测工具的讨论也在“HPC with R简介”幻灯片中,该幻灯片参考了正如德克所提到的,R中有很多评测工具。如果您想要tic/toc的简单性,那么也可以在R中实现
编辑:我已经从MATLAB软件包中拆掉了垃圾收集功能,tic
现在让您选择是对总运行时间感兴趣,还是只对用户时间感兴趣
tic <- function(gcFirst = TRUE, type=c("elapsed", "user.self", "sys.self"))
{
type <- match.arg(type)
assign(".type", type, envir=baseenv())
if(gcFirst) gc(FALSE)
tic <- proc.time()[type]
assign(".tic", tic, envir=baseenv())
invisible(tic)
}
toc <- function()
{
type <- get(".type", envir=baseenv())
toc <- proc.time()[type]
tic <- get(".tic", envir=baseenv())
print(toc - tic)
invisible(toc)
}
tic在CRAN上有一个MATLAB仿真包。它有tic
和toc
的实现(但它们看起来非常类似于Richie Cottons answer中的函数;proc.time()
中使用的是“经过”而不是“user.self”)
>tic
函数(gcFirst=FALSE)
{
如果(gcFirst==TRUE){
gc(verbose=FALSE)
}
赋值(“savedTime”,proc.time()[3],envir=.MatlabNamespaceEnv)
无形的
}
>toc
函数(echo=TRUE)
{
prevTime一个与tic和toc非常简单的等价物,您可以:
tic=proc.time()[3]
...code...
toc=proc.time()[3] - tic
其中[3]是因为我们对proc.time()返回的向量中的第三个元素感兴趣,这是经过的时间。截至2015年3月25日,
可能更早的时候,
这个
包包含函数tic()
和toc()
例如:
> library(pracma)
> tic()
> for(i in 1:10000) mad(runif(10000)) # kill time
> toc()
elapsed time is 18.610000 seconds
有一个相对较新的包tictoc,它完全按照您在Matlab中使用的方式复制这些特性
封闭式方法
一种非常简洁的方法是使用闭包(这仅仅意味着函数中有一个函数):
ticNo,但这里有一个单线解决方案
time.it<-function(f) { a<-proc.time(); out<-f(); print(proc.time()-a); out }
时间。它只是为了完整性:你实际上可以“模拟”抽搐
还有R中的toc,这样你就可以写了
tic
## do something
toc
没有括号。诀窍是滥用print
功能,如中所示:
结果应该是这样的:
user system elapsed
0.000 0.000 2.002
正如我所说,这是一个技巧;system.time
,Rprof
和
例如,包装是测量的方式
计算时间以R
install.packages("tictoc")
library(tictoc)
# Timing nested code.
# The string provided in the call to tic() becomes a prefix to the output of toc()
tic("outer")
Sys.sleep(1)
tic("middle")
Sys.sleep(2)
tic("inner")
Sys.sleep(3)
toc() # inner
# inner: 3.004 sec elapsed
toc() # middle
# middle: 5.008 sec elapsed
toc() # outer
# outer: 6.016 sec elapsed
该软件包实现了前面答案中描述的功能-感谢您的启发!该软件包还添加了嵌套计时,收集用户定义变量、自定义消息和回调中的计时。值得一提的是,现在就用谷歌搜索[r]tic toc
(2013年2月)给出了很多答案;不知道是不是在2011年11月…总是引用一个重要链接中最相关的部分,以防目标站点无法访问或永久脱机。
tic
## do something
toc
tic <- 1
class(tic) <- "tic"
toc <- 1
class(toc) <- "toc"
print.tic <- function(x, ...) {
if (!exists("proc.time"))
stop("cannot measure time")
gc(FALSE)
assign(".temp.tictime", proc.time(), envir = .GlobalEnv)
}
print.toc <- function(x,...) {
if (!exists(".temp.tictime", envir = .GlobalEnv))
stop("did you tic?")
time <- get(".temp.tictime", envir = .GlobalEnv)
rm(".temp.tictime", envir = .GlobalEnv)
print(res <- structure(proc.time() - time,
class = "proc_time"), ...)
invisible(res)
}
tic
Sys.sleep(2)
toc
user system elapsed
0.000 0.000 2.002
install.packages("tictoc")
library(tictoc)
# Timing nested code.
# The string provided in the call to tic() becomes a prefix to the output of toc()
tic("outer")
Sys.sleep(1)
tic("middle")
Sys.sleep(2)
tic("inner")
Sys.sleep(3)
toc() # inner
# inner: 3.004 sec elapsed
toc() # middle
# middle: 5.008 sec elapsed
toc() # outer
# outer: 6.016 sec elapsed