Показать часы в командной строке R

Интересно, есть ли способ отобразить текущее время в командной строке R, как в MS DOS, мы можем использовать

Prompt $T $P$G

включить часы в каждой строке подсказки. Что-то вроде

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

будет делать это, но тогда это будет исправлено в то время, когда он был установлен. Я не уверен, как заставить его обновляться автоматически.

5 ответов

Чейз указывает верный путь как 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.

Ни один из других методов, основанных на обратных вызовах, не будет обновлять приглашение, если не будет выполнена команда верхнего уровня. Таким образом, нажатие возврата в консоли не приведет к изменению. Такова природа стандартной обработки обратных вызовов R.

Если вы установите tcltk2 пакет, вы можете настроить планировщик задач, который изменяет option() следующее:

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

Вуаля, что-то вроде приглашения MS DOS.

NB: Вдохновение пришло от этого ответа.


Примечание 1. Время ожидания (в данном случае 1000) относится к количеству миллисекунд, а не секунд. Вы можете отрегулировать его вниз, когда разрешение меньше секунды.

Вот альтернативное решение обратного вызова:

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

Это работает так же, как метод Дирка, но синтаксис для меня немного проще.

Вы можете изменить символ по умолчанию, который отображается через options() команда. Вы можете попробовать что-то вроде этого:

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

Проверьте страницу справки для ?options для полного списка вещей, которые вы можете установить. Об этом очень полезно знать!

Предполагая, что это то, что вы хотите сделать для каждого сеанса R, рассмотрите возможность переноса этого на свой .Rprofile, Несколько других хороших самородков программирования счастья можно найти здесь на эту тему.

Я не знаю встроенной функции R для этого, но я знаю, что R имеет интерфейсы с другими языками, которые имеют команды системного времени. Может быть, это вариант?

Тьерри упомянул system.time() и есть также proc.time() в зависимости от того, что вам нужно, хотя ни один из них не дает вам текущее время.

Другие вопросы по тегам