R 防止闪亮应用程序中断while循环
我正在尝试在一个while循环中运行一个闪亮的应用程序。退出应用程序时,while循环中断。有没有办法在退出应用程序时保持在循环中 下面是一个问题的例子。app.R文件是在创建新应用程序时创建的应用程序R 防止闪亮应用程序中断while循环,r,while-loop,shiny,R,While Loop,Shiny,我正在尝试在一个while循环中运行一个闪亮的应用程序。退出应用程序时,while循环中断。有没有办法在退出应用程序时保持在循环中 下面是一个问题的例子。app.R文件是在创建新应用程序时创建的应用程序 library(shiny) x <- 1 while(x<=5){ runApp("app.R") x <- x+1 } 库(闪亮) 停止闪亮应用程序的“标准”方法是简单地停止为其服务的R进程。你需要一种在不中断的情况下关闭应用程序的方法。stopApp(
library(shiny)
x <- 1
while(x<=5){
runApp("app.R")
x <- x+1
}
库(闪亮)
停止闪亮应用程序的“标准”方法是简单地停止为其服务的R进程。你需要一种在不中断的情况下关闭应用程序的方法。stopApp()
函数执行此操作,将线程控制权返回到脚本的主流程
这个例子来自?runApp
的帮助页面,我在下面添加了两个注释
library(shiny)
x <- 1
while (x <= 5) {
runApp(list(
ui = bootstrapPage(
numericInput('n', 'Number of obs', 100),
plotOutput('plot'),
actionButton("done", "close") # added a close button
),
server = function(input, output) {
output$plot <- renderPlot({ hist(runif(input$n)) })
observeEvent(input$done, stopApp()) # added an observer to the close button
}
))
x <- x+1
}
重要的是让你的用户明白他们需要在应用程序中使用你的“关闭”按钮,而不是关闭浏览器窗口或使用RStudio中的“停止”按钮。这些动作中的任何一个都会中断主脚本
编辑以添加:
实际上,在{shiny}
中内置了一些函数,用于监听用户会话的结束(即关闭浏览器窗口)、onStop()
和onsessionend()
。您应该查看它们的帮助页面,但是将我的observeEvent(…)
行替换为onStop(stopap)
(或onsessionend(stopap)
)似乎效果不错。然后您可以从UI中删除关闭按钮。是否runApp(“app.R”)
产生错误?如果是这样,您需要捕获错误,可以使用try
或tryCatch
。没有错误,它只是退出while循环。我尝试了tryCatch()
和suppressMessages()
,但它仍然打破了循环。(suppressMessages
只防止消息转储到控制台,对程序流没有任何作用。)
x <- 1
while (x <= 5) {
user_input <- runApp(<code from above>)
x <- x+1
}