如何在Shiny

时间:2017-02-21 22:43:01

标签: r shiny terminate

我想基于用户输入每隔n秒在循环中运行一些代码。我用reactiveTimer()来做 应用程序正在从文件中读取,但是当没有更多要阅读或用户单击按钮时,我想终止循环。

我的代码似乎在服务器端如下:

observeEvent(input$start, {
    autoInvalidate <- reactiveTimer(input$timerValue)

    output$plot <- renderPlot({
         autoInvalidate()
         ...code...
    }
}

感谢您的任何建议

1 个答案:

答案 0 :(得分:1)

如果想要明确地停止计时器,你可以将它设置为reactiveTimer(Inf),否则你需要让它保持运行,你可以使用布尔值来打开和关闭它的状态,如下例所示:

library(shiny)
shinyApp(ui=fluidPage(textOutput("mytext"),
                      actionButton("s0","manual"),
                      actionButton("s1","start"),
                      actionButton("s2","stop"),
                      actionButton("s3","terminate")),
         server=function(input, output){
           my<-reactiveValues(inc=0, timer=reactiveTimer(100), started=FALSE)

           observeEvent(input$s0, {my$inc<-my$inc+1})
           observeEvent(input$s1, {my$started<-TRUE})
           observeEvent(input$s2, {my$started<-FALSE})
           observeEvent(input$s3, {my$timer<-reactiveTimer(Inf)})

           observe({
             my$timer()
             if(isolate(my$started))
               my$inc<-isolate(my$inc)+1
             })

           output$mytext <- renderText(my$inc)
         })