在 Viewer 中调用 Shiny 函数

Calling Shiny function in Viewer

在 RStudio 中,我希望在查看器中显示一个 Shiny 函数 hi.app。默认行为是在浏览器中打开应用程序。

hi.app <- function() {
  require(shiny)
   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
             })
   }
  )
}
hi.app()

调用 hi.app() 后,应用程序在浏览器中打开。

我想要什么:定义一个参数,以便当我调用它时,这个特定的应用程序总是在 RStudio 的查看器中打开。

我试过的方法:在shinyApp之前添加(但没有成功)以下内容:
options(shiny.launch.browser = .rs.invokeShinyWindowViewer)

添加这样的选项

hi.app <- function() {
    require(shiny)
    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
            })
        },
        options=options(shiny.launch.browser = .rs.invokeShinyWindowViewer)
    )
}
hi.app()

更新:使用 shiny gadgets 而不是 shiny apps 似乎是万无一失的,如果闪亮的应用程序是 运行 本地。参数可以通过 runGadget(...) 中的 viewer 参数设置:

hi_app <- function() {
  ui = miniPage(
    gadgetTitleBar("My Gadget"),
    textInput("name", "Write your name", value = "stranger"),
    verbatimTextOutput("greeting")
  )
  server = function(input, output) {
    output$greeting <- renderPrint({
      greeting <- paste("Hi,", input$name) 
      greeting
    })
    observeEvent(input$done, {
      stopApp()
    })
  }
  runGadget(ui, server,viewer = paneViewer())
}

say_hi <- function() {
  library(shiny)
  library(miniUI)
  hi_app()
}