Р: Предложите 5 секунд, чтобы потребовать паузу. Если пауза не требуется, возобновите процесс
Как я могу предложить 5 секунд пользователю что-то написать, чтобы попросить паузу неопределенной продолжительности. Если в течение этих 5 секунд пауза не требуется, процесс продолжается. Если требуется пауза, то у пользователя есть все время, в котором он нуждается, и он (и) может нажать "ввод", чтобы возобновить процесс всякий раз, когда он хочет.
Интерес такой функциональности заключается в том, что если пользователь отсутствует, пауза длится всего 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 продолжить. Если вы нажмете "Продолжить" в любое время, он сразу же вернется. Если вы нажмете "Пауза", обратный отсчет прекратится, и он будет ждать, пока вы нажмете "Продолжить" (или нажмите клавишу), прежде чем продолжить.
Это продолжение ответа, приведенного здесь.