我如何通过shinyapps :: deployApp()部署使用shinyApp()创建的闪亮应用程序?

时间:2015-06-25 11:05:56

标签: r shiny

我想通过调用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用户google群组中,但没有得到回应,所以我在这里再试一次。

1 个答案:

答案 0 :(得分:2)

shinyApp命令不适用于应用程序构建,而不是用于构建应用程序。求助:

  

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

deployApp不支持shinyApp个应用,正如您可能从?deployApp找到的那样。也就是说,通过或多或少地将您的命令粘贴到名为ui.Rserver.R的文件中,它可以轻松修复您的(和大多数)应用,包含在shinyUI()和{ {1}}:

ui.R:

shinyServer()

server.R:

library(shiny)

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

将这两个文件放在一个目录中,然后在使用library(shiny) shinyServer(function(input, output) { output$plot <- renderPlot( plot(head(cars, input$n)) ) } ) 进行测试后运行deployApp("dir")

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