45

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

Prompt $T $P$G

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

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

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

4

5 回答 5

51

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>

我们注册一个回调,在每个命令完成后进行评估。这就是诀窍。更多精美的文档位于 R 开发者网站的此文档中。

于 2010-11-19T13:31:08.930 回答
19

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

如果你安装了这个tcltk2包,你可以设置一个任务调度器来改变option()如下:

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

瞧,类似于 MS DOS 提示符。

注意:灵感来自这个答案


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

于 2012-02-08T18:25:32.040 回答
18

Here is an alternative callback solution:

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

This works the same as Dirk's method, but the syntax is a bit simpler to me.

于 2011-12-12T20:13:04.030 回答
2

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

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

查看帮助页面以?options获取您可以设置的内容的完整列表。这是一件非常有用的事情!

假设这是您想要为每个 R 会话执行的操作,请考虑将其移至您的.Rprofile. 在该主题上可以找到其他几个编程快乐的好块头

于 2010-11-19T13:04:11.793 回答
0

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

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

于 2010-11-19T12:09:52.390 回答