Display a time clock in the R command line

I wonder if there is a way to display the current time in the R command line, like in MS DOS, we can use

Prompt $T $P$G

to include the time clock in every prompt line. Something like

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

will do it, but then it is fixed at the time it was set. I'm not sure how to make it update automatically.


Solution 1:

Chase points the right way as options("prompt"=...) can be used for this. But his solutions adds a constant time expression which is not what we want.

The documentation for the function taskCallbackManager has the rest:

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>

We register a callback that gets evaluated after each command completes. That does the trick. More fancy documentation is in this document from the R developer site.

Solution 2:

None of the other methods, which are based on callbacks, will update the prompt unless a top-level command is executed. So, pressing return in the console will not create a change. Such is the nature of R's standard callback handling.

If you install the tcltk2 package, you can set up a task scheduler that changes the option() as follows:

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

Voila, something like the MS DOS prompt.

NB: Inspiration came from this answer.


Note 1: The wait time (1000 in this case) refers to the # of milliseconds, not seconds. You might adjust it downward when sub-second resolution is somehow useful.

Solution 3:

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.

Solution 4:

You can change the default character that is displayed through the options() command. You may want to try something like this:

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

Check out the help page for ?options for a full list of things you can set. It is a very useful thing to know about!

Assuming this is something you want to do for every R session, consider moving that to your .Rprofile. Several other good nuggets of programming happiness can be found hither on that topic.