在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;
感谢阅读。
答案 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