我工作目录中的文件app.R
包含一个Shiny app:
shinyApp(
ui = fluidPage(
textInput("name", "Write your name", value = "stranger"),
verbatimTextOutput("greeting")
),
server = function(input, output) {
output$greeting <- renderPrint({
greeting <- paste("Hi,", input$name)
greeting
})
}
)
我想从R中的一个函数中调用此应用程序,然后退出应用程序并让R执行该函数的其余部分。该函数如下所示:
hi.app <- function() {
library(shiny)
shiny::runApp("app.R")
print("Finished.")
}
应用程序在运行hi.app()
时打开,但当我关闭应用程序窗口时,该函数会调用调试器:
来自:Sys.sleep(0.001)
期望的行为:
hi.app()
[1] "Finished"
答案 0 :(得分:1)
我遇到了同样的问题,但是,不需要使用小工具。仍然可以使用shinyApp
函数,包括stopApp
函数。以下示例突出显示了两个选项:
onSessionEnded
。以下是代码:
rm(list=ls())
library(shiny)
doshiny <- function() {
app=shinyApp(
ui = fluidPage(
textInput("name", "Write your name", value = "stranger"),
actionButton("ending","Done"),
verbatimTextOutput("greeting")
),
server = function(input, output, session) {
output$greeting <- renderPrint({
greeting <- paste("Hi,", input$name)
greeting
})
observeEvent(input$ending, {
stopApp()
})
session$onSessionEnded(function() {
stopApp()
})
}
)
runApp(app)
}
say_hi <- function() {
doshiny()
print("Finished.")
}
say_hi()