在R命令行中显示时钟

Shu*_*Shu 42 time r clock

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

Prompt $T $P$G
Run Code Online (Sandbox Code Playgroud)

在每个提示行中包含时钟.就像是

options(prompt=paste(format(Sys.time(), "%H:%M:%S"),"> "))
Run Code Online (Sandbox Code Playgroud)

会这样做,但它会在它设置时固定.我不确定如何让它自动更新.

Dir*_*tel 47

Chase指出了options("prompt"=...)可以用于此的正确方法.但他的解决方案增加了一个恒定的时间表达,这不是我们想要的.

该函数的文档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>
Run Code Online (Sandbox Code Playgroud)

我们注册了一个在每个命令完成后得到评估的回调.这就是诀窍.R开发人员站点的本文档中提供了更多精美的文档.


Joh*_*lby 17

这是另一种回调解决方案:

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

这与Dirk的方法相同,但语法对我来说有点简单.


Ite*_*tor 17

除非执行顶级命令,否则基于回调的其他任何方法都不会更新提示.因此,在控制台中按回车不会产生更改.这就是R标准回调处理的本质.

如果安装tcltk2软件包,则可以设置更改option()如下的任务计划程序:

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

Voila,类似于MS DOS提示符.

NB:灵感来自这个答案.


注1:等待时间(本例中为1000)是指毫秒数,而不是秒数.当亚秒级分辨率在某种程度上有用时,您可以向下调整它.


Dan*_*age 0

我不知道 R 的本机函数可以执行此操作,但我知道 R 与其他具有系统时间命令的语言有接口。也许这是一个选择?

蒂埃里提到system.time(),还有proc.time()取决于你需要它的目的,尽管这些都没有给你当前时间。