Показать часы в командной строке R - PullRequest
42 голосов
/ 19 ноября 2010

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

Prompt $T $P$G

для включения часов в каждой строке приглашения.Что-то вроде

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

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

Ответы [ 5 ]

47 голосов
/ 19 ноября 2010

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

17 голосов
/ 08 февраля 2012

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

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

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

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

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


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

17 голосов
/ 13 декабря 2011

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

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

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

2 голосов
/ 19 ноября 2010

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

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

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

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

0 голосов
/ 19 ноября 2010

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

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

...