Есть ли способ включить таймер обратного отсчета в функцию R? - PullRequest
1 голос
/ 02 июля 2019

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

Я нашел пакет с именем countdown, который, по моему мнению, может быть полезен, его можно найти на GitHub здесь . При использовании этого пакета я не могу заставить функцию countdown_fullscreen работать так, как мне нужно для моей функции - она ​​не отображает обратный отсчет на панели просмотра и не запускается автоматически. Обе эти проблемы снижают точность эксперимента.

Это код, который я использую для своей функции:

record_data = function(x) {
require(tictoc) #load required packages
require(countdown) 

timer = readline("Observation time: ")
timer = as.numeric(timer)
countdown::countdown_fullscreen(timer)

while(T){       #open infinite while loop
    tic()       #start timer
    input_state=readline("State input: ")  #allow for entry of state
    if(input_state %in% 1:5){    #check if it's acceptable 
        elapsed=toc()            #if it is then end timer and record data
        write.table(cbind(input_state,elapsed$toc-elapsed$tic),'results.txt',col.names=F,row.names=F,quote=F,append=T)
    }else if(input_state=='t'){  #if input is 't' 
        break                    #break out of while loop
    }else if(input_state <1 | input_state > 5 & input_state!='t'){ #if input is not and accepted state AND is not 't'
     print('thats not an allowed state- please try another')
     } 
}

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

1 Ответ

1 голос
/ 02 июля 2019

Я не знаком с пакетом обратного отсчета. Но одним из вариантов может быть использование индикатора выполнения tcltk

library(tcltk)

timer = 10
pb <- tkProgressBar("Timer")
start = Sys.time()
while(TRUE) {
  elapsed = as.numeric(difftime(Sys.time(), start, units = 'secs'))
  remaining = timer - elapsed
  Sys.sleep(0.1)
  setTkProgressBar(pb, remaining/timer, label = sprintf("Time remaining: %i seconds", round(remaining)))
  if (remaining <= 0) break
}
Sys.sleep(2)
close(pb)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...