Display a time clock in the R command line

守給你的承諾、 提交于 2020-01-08 13:55:11

问题


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.


回答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.




回答2:


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.




回答3:


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.




回答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.




回答5:


I don't know of a native R function for doing this, but I know R has interfaces with other languages that do have system time commands. Maybe this is an option?

Thierry mentioned system.time() and there is also proc.time() depending on what you need it for, although neither of these give you the current time.



来源:https://stackoverflow.com/questions/4222476/display-a-time-clock-in-the-r-command-line

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!