在R命令行中显示一个时钟

我不知道是否有一种方法来显示R命令行中的当前时间,就像在MS DOS中一样,我们可以使用

Prompt $T $P$G 

在每条提示行中包含时钟。 就像是

 options(prompt=paste(format(Sys.time(), "%H:%M:%S"),"> ")) 

会做到这一点,但它是固定在它被设置的时间。 我不知道如何自动更新。

Chase指出正确的方法,因为可以使用options("prompt"=...) 。 但他的解决scheme增加了一个恒定的时间expression,这不是我们想要的。

其余的部分是函数taskCallbackManager的文档:

 R> h <- taskCallbackManager() R> h$add(function(expr, value, ok, visible) { + options("prompt"=format(Sys.time(), "%H:%M:%S> ")); + return(TRUE) }, + name = "simpleHandler") [1] "simpleHandler" 07:25:42> a <- 2 07:25:48> 

我们注册一个callback,每个命令完成后得到评估。 这就是诀窍。 R开发者网站的这个文档中有更多的花哨的文档。

这是一个替代callback解决scheme:

 updatePrompt <- function(...) {options(prompt=paste(Sys.time(),"> ")); return(TRUE)} addTaskCallback(updatePrompt) 

这和Dirk的方法一样,但是语法对我来说更简单一些。

除非执行顶层命令, 否则基于callback的其他方法都不会更新提示。 所以,在控制台中按回车不会产生变化。 这是R的标准callback处理的本质。

如果您安装了tcltk2软件包,则可以设置一个任务计划程序来更改option() ,如下所示:

 library(tcltk2) tclTaskSchedule(1000, {options(prompt=paste(Sys.time(),"> "))}, id = "ticktock", redo = TRUE) 

瞧,就像MS DOS提示符一样。

注意:灵感来自这个答案 。


注1:等待时间(在这种情况下是1000)是指毫秒数,而不是秒数。 当亚秒分辨率有用时,可以向下调整它。

您可以更改通过options()命令显示的默认字符。 你可能想尝试这样的事情:

 options(prompt = paste(Sys.time(), ">")) 

查看“ ?options的帮助页面,查看可以设置的完整列表。 了解这是一个非常有用的事情!

假设这是你想要为每个R会议做的事情,考虑把它移到你的.Rprofile 。 其他几个编程幸福的好东西也可以在这个话题上find。

我不知道这样做的本地R函数,但我知道R与其他有系统时间命令的语言接口。 也许这是一个select?

Thierry提到system.time() ,还有proc.time()这取决于你需要什么,虽然这些都不会给你当前的时间。