Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 重置反应计时器_R_Shiny - Fatal编程技术网

R 重置反应计时器

R 重置反应计时器,r,shiny,R,Shiny,我想将反应计时器重置为零,然后再次开始计数到10000 如果在10秒内按下重置按钮,“计时器触发”将不会打印 我想这可能行得通,但不行 require('shiny') if (interactive()) { ui <- fluidPage( actionButton("reset_button", "Reset") ) server <- function(input, output) { autoInvalidate <- reacti

我想将反应计时器重置为零,然后再次开始计数到10000

如果在10秒内按下重置按钮,“计时器触发”将不会打印

我想这可能行得通,但不行

require('shiny')
if (interactive()) {

  ui <- fluidPage(
    actionButton("reset_button", "Reset")
  )


  server <- function(input, output) {

    autoInvalidate <- reactiveTimer(10000)

    observe({
      autoInvalidate()
      print ("timer fires")      

    })

    observeEvent(input$reset_button, 
     {
       autoInvalidate <- reactiveTimer(10000)
       print("reset")
     }
    )

  }

  shinyApp(ui, server)
}
require('shinny'))
if(interactive()){
ui这应该做到:

library(shiny)
ui <- fluidPage(
  actionButton("reset_button", "Reset"),
  textOutput("text")
)

server <- function(input, output, session) {

  v <- reactiveValues(timer = Sys.time()+5)

  observe({
    invalidateLater(100)
    if(v$timer <= Sys.time()){
      v$timer <- Sys.time()+5
      print("timer fires") 
    }
  })

  observeEvent(input$reset_button,{
    v$timer <- Sys.time()+5
    print("reset")
  })

}
shinyApp(ui, server)
库(闪亮)

ui我不能100%确定我是否理解您想要的行为。如果您按下“重置”,计时器是否应该再次从0开始,或者“计时器触发”是否永远不会被打印。因为使用
reactiveTimer
invalidaterater
时,您的代码将每x毫秒重新执行一次

我举了一个小例子。如果你想在按下“重置”时“timer fires”永远不会出现,你必须包括
loopit()
部分。如果你只是想重置计时器,那么就用
loopit()
删除行

require('shinny'))
if(interactive()){

ui这将立即触发“观察”并在按下“重置”后重新执行它。我不确定所需的行为应该是什么,但我认为OP的第1行和第2行在某种程度上相互矛盾。这种方法对我来说效果很好。也许你在想
observe()
无效,当使用重置按钮更改
v$timer
时,会重新计算该值?这是真的,但如果计时器值仍在将来,则
if()
条件为假,因此不会按预期发生任何事情。
require('shiny')
if (interactive()) {

  ui <- fluidPage(
    actionButton("reset_button", "Reset")
  )


  start = Sys.time()
  n=10000

  server <- function(input, output) {
    loopit <- reactiveVal(TRUE)

    observe({
      invalidateLater(n)
      if (loopit()) {
        print(paste("start: ", start))
        if (Sys.time() > start+(n/1000)) {
          print ("timer fires")      
        } 
      }
    })

    observeEvent(input$reset_button, {
      start <<- Sys.time()
      loopit(FALSE)
      print("reset")
    })
  }

  shinyApp(ui, server)
}