R中的秒表功能

wah*_*ulu 24 matlab r

是否有类似于MATLAB的tic/toc的R计时器或秒表功能?

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.它的实现tictoc(但他们看起来非常相似,在小齐棉花回答的功能;"过去"是用来代替"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)


Dir*_*tel 8

不存在tic和toc的直接等价物.

请参阅help(system.time)有关分析的R扩展手册.关于分析和分析工具的讨论也在高性能计算与R任务视图中引用的"HPC with R简介"幻灯片中进行了讨论


p_b*_*ill 8

你可以拥有一个与tic和toc非常简单的等价:

tic=proc.time()[3]

...code...

toc=proc.time()[3] - tic
Run Code Online (Sandbox Code Playgroud)

其中[3]是因为我们对proc.time()返回的向量中的第三个元素感兴趣,这是经过的时间.


Jar*_*oss 5

关闭方法

一个非常干净和简单的方法是使用闭包(这意味着在函数中包含一个函数):

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)