R: предложите 5 секунд, чтобы потребовать паузу. Если пауза не потребовалась, возобновите процесс
Как я могу предложить 5 секунд пользователю написать что-то, чтобы попросить паузу неопределенной длины. Если в течение этих 5 секунд пауза не требуется, процесс продолжается. Если требуется пауза, у пользователя есть все время (и), в котором он нуждается, и он может нажать "enter", чтобы возобновить процесс всякий раз, когда он захочет.
Интерес такой функциональности заключается в том, что если пользователь отсутствует, пауза длится всего 5 секунд. И если пользователь присутствует, то он может наслаждаться паузой, чтобы наблюдать за графиком, который был создан, например.
В конечном итоге код может выглядеть следующим образом:
DoYouWantaPause = function(){
myprompt = "You have 5 seconds to write the letter <p>. If you don't the process will go on."
foo = readline(prompt = myprompt, killAfter = 5 Seconds) # give 5 seconds to the user. If the user enter a letter, then this letter is stored in `foo`.
if (foo == "p" | foo == "P") { # if the user has typed "p" or "P"
foo = readline(prompt = "Press enter when you want to resume the process") # Offer a pause of indefinite length
}
}
# Main
for (i in somelist){
...
DoYouWantaPause()
}
Ответы
Ответ 1
Вот небольшая быстрая функция, основанная на пакетах tcltk и tcltk2:
library(tcltk)
library(tcltk2)
mywait <- function() {
tt <- tktoplevel()
tmp <- tclAfter(5000, function()tkdestroy(tt))
tkpack( tkbutton(tt, text='Pause', command=function()tclAfterCancel(tmp)))
tkpack( tkbutton(tt, text='Continue', command=function()tkdestroy(tt)),
side='bottom')
tkbind(tt,'<Key>', function()tkdestroy(tt) )
tkwait.window(tt)
invisible()
}
Запустите mywait
, и появится небольшое окно с 2 кнопками. Если вы ничего не сделаете, то через 5 секунд окно исчезнет, и mywait
вернется, позволяя R продолжить. Если вы нажмете "Продолжить" в любое время, он сразу же вернется. Если вы нажмете "Пауза", обратный отсчет прекратится и будет ждать, пока вы нажмете "Продолжить" (или нажмете клавишу), прежде чем продолжить.
Это расширение ответа, данного здесь.