Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab R中的秒表功能_Matlab_R - Fatal编程技术网

Matlab R中的秒表功能

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

是否有类似于MATLAB的R定时器或秒表功能?

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


请参阅
帮助(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