以编程方式启动 R Shiny 应用程序作为后台作业

pan*_*man 5 r background-process shiny

Dean Attali 提供了一个精彩的示例,介绍如何使用关闭按钮优雅地退出 Shiny 应用程序,该按钮既关闭浏览器窗口又结束 Shiny 会话。考虑以下示例(Dean 原始代码的修改):

ui.r

library(shiny)
library(shinyjs)

jscode <- "shinyjs.closeWindow = function() { window.close(); }"

ui <- fluidPage(
  useShinyjs(),
  extendShinyjs(text = jscode, functions = c("closeWindow")),
  htmlOutput(outputId = "exitHeading"),
  actionButton(inputId = "closeGUI", label = "Exit")
)
Run Code Online (Sandbox Code Playgroud)

server.r

library(shiny)
library(shinyjs)

server <- function(input, output, session) {
  output$exitHeading <- renderText("Press the button below to exit the app")
  observeEvent(input$closeGUI, {
    js$closeWindow()
    stopApp()
  })
}
Run Code Online (Sandbox Code Playgroud)

并运行应用程序:

runApp(appDir = "/tmp")
Run Code Online (Sandbox Code Playgroud)

我的问题是关于如何以编程方式启动 Shiny 应用程序作为后台作业,以便在应用程序仍在运行时,RStudio 控制台可以免费进一步使用(甚至并行启动第二个 Shiny 应用程序),然后使用结束作业上面应用程序的退出按钮。我正在寻找一种可以添加到包含闪亮应用程序的包中的解决方案,例如这个

我已阅读本文并尝试了提供的示例应用程序,但它仍然需要用户手动干预。

有人可以帮忙吗?

Abd*_*Mtk 0

因此,正如我在评论中提到的,您可以通过使用system基本上运行终端命令的 来实现此目的,并将waitshow.output.on.console标志设置为FALSE

system('Rscript file.r', wait=F, show.output.on.console = F)
# if you want to access a file from in a package u need
# also in the source of the package you need to put the
# folder `directory` in `root.of.package/inst`
p <- system.file(file.path("directory", "myfile.r"), package = "my.package")
system(paste0('Rscript "', p, '"'), wait=F)
Run Code Online (Sandbox Code Playgroud)