如果我问一个非常基本的问题,我会提前道歉.我是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")
}
})
})
Run Code Online (Sandbox Code Playgroud)
这是一个问题,因为R是单线程的,而应用程序没有响应,因为它陷入无限循环.实际上,我们在for循环中运行了大量耗时的计算,我们需要在用户单击停止时在当前迭代之后停止计算.
有没有办法解决这个问题?任何建议都会有所帮助.谢谢