Ric*_*ton 37
正如Dirk所提到的,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)
}
Run Code Online (Sandbox Code Playgroud)
用法是,例如, tic(); invisible(qr(matrix(runif(1e6), nrow=1e3))); toc()
rcs*_*rcs 14
在CRAN上有一个MATLAB仿真包matlab.它的实现tic
和toc
(但他们看起来非常相似,在小齐棉花回答的功能;"过去"是用来代替"user.self"中proc.time()
)
> tic
function (gcFirst = FALSE)
{
if (gcFirst == TRUE) {
gc(verbose = FALSE)
}
assign("savedTime", proc.time()[3], envir = .MatlabNamespaceEnv)
invisible()
}
<environment: namespace:matlab>
> toc
function (echo = TRUE)
{
prevTime <- get("savedTime", envir = .MatlabNamespaceEnv)
diffTimeSecs <- proc.time()[3] - prevTime
if (echo) {
cat(sprintf("elapsed time is %f seconds", diffTimeSecs),
"\n")
return(invisible())
}
else {
return(diffTimeSecs)
}
}
<environment: namespace:matlab>
Run Code Online (Sandbox Code Playgroud)
不存在tic和toc的直接等价物.
请参阅help(system.time)
有关分析的R扩展手册.关于分析和分析工具的讨论也在高性能计算与R任务视图中引用的"HPC with R简介"幻灯片中进行了讨论
你可以拥有一个与tic和toc非常简单的等价:
tic=proc.time()[3]
...code...
toc=proc.time()[3] - tic
Run Code Online (Sandbox Code Playgroud)
其中[3]是因为我们对proc.time()返回的向量中的第三个元素感兴趣,这是经过的时间.
一个非常干净和简单的方法是使用闭包(这意味着在函数中包含一个函数):
tic <- function () {
now <- proc.time()
function () {
proc.time() - now
}
}
Run Code Online (Sandbox Code Playgroud)
您可以像这样启动计时器:
toc <- tic()
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样返回时间:
toc()
Run Code Online (Sandbox Code Playgroud)
它输出一个命名向量,打印如下:
user system elapsed
0.008 0.004 2.055
Run Code Online (Sandbox Code Playgroud)
即使这个版本很简单,您也可以获得 Matlab 和 Richie Cotton 版本的所有功能以及能够运行多个计时器的附加功能:
toc1 <- tic()
toc2 <- tic()
Run Code Online (Sandbox Code Playgroud)