按钮点击闪亮时停止耗时的功能

时间:2016-06-06 18:15:38

标签: r shiny infinite-loop

如果我问一个非常基本的问题,我会提前道歉。我是R和Shiny的新手,我无法在任何地方找到解决这个问题的方法。

在这里,我有一个非常基本的shinyApp,它在ui.R中有两个按钮,Start按钮将调用一个循环运行的函数,并在屏幕上显示一些东西。我有一个停止按钮,应该能够终止此循环。

我无法获得终止无限循环的停止按钮,任何想法?

以下是我试过的。如果我做错了,请原谅我

#ui.R
library(shiny)

shinyUI(fluidPage(
    actionButton("startSearch", label = "Start Search"),
    actionButton("stopSearch",  label = "Stop Search")
))

#server.R
library(shiny)

shinyServer(function(input, output, session){

  initial.stop <- 0
  observeEvent(input$startSearch,
   {
     while(TRUE) 
     {
       Sys.sleep(1)
       if (initial.stop < input$stopSearch) 
       {
         print('break')
         stop('error')
       }
       print("Infinite loop")
     }
   })
})

这是一个问题,因为R是单线程的,而应用程序没有响应,因为它陷入无限循环。实际上,我们在for循环中运行了大量耗时的计算,当用户单击停止时,我们需要在当前迭代之后停止计算。

有没有办法解决这个问题?任何建议都会有所帮助。感谢

0 个答案:

没有答案