我想基于用户输入每隔n秒在循环中运行一些代码。我用reactiveTimer()来做 应用程序正在从文件中读取,但是当没有更多要阅读或用户单击按钮时,我想终止循环。
我的代码似乎在服务器端如下:
observeEvent(input$start, {
autoInvalidate <- reactiveTimer(input$timerValue)
output$plot <- renderPlot({
autoInvalidate()
...code...
}
}
感谢您的任何建议
答案 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)
})