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

Dean Attali 在 how to exit elegantly 上提供了一个很好的例子从 Shiny 应用程序使用关闭按钮关闭浏览器窗口并结束 Shiny session 。考虑以下示例(修改来自 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")
)

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()
  })
}

并运行应用程序:

runApp(appDir = "/tmp")

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

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

有人可以帮忙吗?

最佳答案

正如我在评论中提到的那样,您可以通过使用基本上运行终端命令的 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)

https://stackoverflow.com/questions/64462965/

相关文章:

matlab - 由凸包创建的曲面上点值的插值

reactjs - 如何更改点击 react 的类(class)?

reactjs - 如何始终覆盖具有不确定后缀的 JSS 样式?

ansible - Ansible 中角色的串行执行

firebase - 使用 Mockito 为 Firebase 用户身份验证设置单元测试

javascript - Windows Localhost 中的 Wiki.js 安装

python-3.x - 一个FITS文件的坐标转换问题

dart - Dart 中的不同流

node.js - AWS sdk 使用 sso 获取凭证

java - 微服务之间的通信和使用 REST 的内聚