R - 如何“计时”延迟以及用户输入

时间:2010-09-16 18:04:21

标签: r timing

在R中创建计时器的好方法是什么。这需要很少的系统资源。

到目前为止,我有一个简单的延迟:

t1=as.numeric(format(Sys.time(), "%s"));
t2=t1; 
while (t2-t1<5) t2=as.numeric(format(Sys.time(), "%s"));

和相应的计时器:

t1=as.numeric(format(Sys.time(), "%s"));t2=t1;

[事件]

t2=as.numeric(format(Sys.time(), "%s"));
time=t2-t1;

感谢阅读。

3 个答案:

答案 0 :(得分:4)

如果您只想让R暂停并且在给定时间内不占用资源,请使用Sys.sleep函数。

如果你想要一些更复杂的东西,你可以让R做其他事情或其他交互,但是在给定的延迟之后会发生一些事情,那么最好去tcltk路线。

答案 1 :(得分:2)

对于初学者来说,放弃as.numeric(format())业务 - 不执行此操作可以节省您的“系统资源”,无论如何您都可以计算日期/时间类型。其余代码可以保持原样。

否则,计时器通常会在自己的事件循环中运行。鉴于R是单线程的,这很棘手但如果我记得人们已经做过,例如使用R。

中包含的tcltk软件包

答案 2 :(得分:1)

您是否只想要表达式的运行时?然后你可以使用system.time,例如

system.time(sum(1:1e5))

我是tcltk软件包的新手,但我想知道Dirk和Greg是否在谈论以下内容:

after <- function(ms, func) {
  library(tcltk)
  invisible(.Tcl(paste("after", ms, .Tcl.callback(func))))
}

示例:

> after(7000, function() cat("hi!\n"))
> cat("hello?\n")
hello?
hi!

Revolution Analytics的文档非常有用: http://www.inside-r.org/r-doc/tcltk/tclRequire Tcl“after”命令的描述: http://www.astro.princeton.edu/~rhl/Tcl-Tk_docs/tcl/after.n.html