在这里,我有一个非常基本的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循环中运行了大量耗时的计算,当用户单击停止时,我们需要在当前迭代之后停止计算。
有没有办法解决这个问题?任何建议都会有所帮助。感谢