【问题标题】:How could I deploy a shiny app created using shinyApp() via shinyapps::deployApp( )?如何通过 shinyapps::deployApp() 部署使用 shinyApp() 创建的闪亮应用程序?
【发布时间】:2015-09-11 22:57:53
【问题描述】:

我想通过调用shinyApp() 函数来部署(到网络)一个在 R/Shiny 中创建的应用程序。

可以通过调用ShinyApp() 来制作应用程序,如下所示:

 test_app = shinyApp(
    ui = fluidPage(
      numericInput("n", "n", 1),
      plotOutput("plot")
    ),
    server = function(input, output) {
      output$plot <- renderPlot( plot(head(cars, input$n)) )
    }
  )

这将返回一个代表应用程序的对象,并且应用程序可以通过打印该对象来运行。我希望部署使用shinyapps::deployApp( test_app) 制作的应用程序,但这给了我以下错误:

Error in shinyapps::deployApp(test_app) : 
  appDir must be a single element character vector

这是因为 deployApp 函数需要一个目录而不是 shinyApp 对象。据推测,用于构建和部署应用程序的信息包含在 test_app 对象中,但检查该对象并没有透露太多信息,而且对于我创建的任何应用程序来说似乎都是一样的:

>  str(test_app)
List of 4
 $ httpHandler     :function (req)  
 $ serverFuncSource:function ()  
 $ onStart         : NULL
 $ options         : list()
 - attr(*, "class")= chr "shiny.appobj"
> 

生成应用程序的代码没有以任何明显的方式包含在该对象中。我怀疑答案可能与我不明白的 R6 参考类有关。

有人知道我如何从test_app 对象中提取应用程序中包含的信息,以便通过deployApp() 函数部署它吗? (或替代方法)

我已经在shinyApps users google 群组上发布了这个,但没有得到任何回应,所以我在这里再试一次。

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    shinyApp 命令不适用于应用程序构建,来自它的帮助:

    您通常不需要使用这些函数来创建/运行 应用程序;它们旨在用于互操作性目的,例如 将 Shiny 应用程序嵌入到 knitr 文档中。

    deployApp 不支持shinyApp 应用程序,您可能从?deployApp 找到。也就是说,通过或多或少地将您的命令粘贴到名为ui.Rserver.R 的文件中,并用shinyUI()shinyServer() 包装,这对您(和大多数)应用程序来说是一个简单的修复:

    ui.R:

    library(shiny)
    
    shinyUI(fluidPage(
      numericInput("n", "n", 1),
      plotOutput("plot")
      )
    )
    

    服务器.R:

    library(shiny)
    
    shinyServer(function(input, output) {
      output$plot <- renderPlot( plot(head(cars, input$n)) )
      }
    )
    

    把这两个文件放在一个目录下,用runApp("dir")测试后运行deployApp("dir")

    如果您的闪亮应用程序的某些部分不是服务器或 UI 的一部分(即数据预处理),您需要将它们粘贴到相关文件中闪亮调用的上方。如果你用参数调用你的闪亮应用程序,你可以在闪亮调用之上硬编码它们,或者将它们作为反应值集成到闪亮本身中。

    【讨论】:

    • 谢谢,但我的实际应用程序与这个测试不同(见这里github.com/tomliptrot/predictshine)。它从另一个 R 函数中动态创建一个闪亮的应用程序,目前,它在浏览器上显示该应用程序。但我希望能够保存和部署该应用程序。我在帮助文件中看到了该评论,但我想知道是否有解决方法...
    • 我快速玩了一下您的应用程序 - 请参阅 gist.github.com/jeremycg/a97a0f9837977d144a0c 或 runGist("gist.github.com/jeremycg/a97a0f9837977d144a0c")。您只需将任何非 ui 和服务器内容粘贴到服务器顶部即可。R和 ui.R,以及硬编码您使用的任何参数。您显然可以使 armuents、labels 等成为响应式,但这需要更多的工作。
    • 显然,ui.r 和 server.r 中都不需要所有的东西,但这是一个快速而肮脏的例子
    猜你喜欢
    • 2018-05-24
    • 2016-11-16
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 2020-08-07
    • 2021-10-09
    • 2021-02-22
    相关资源
    最近更新 更多