我想通过调用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群组中,但没有得到回应,所以我在这里再试一次。
答案 0 :(得分:2)
shinyApp
命令不适用于应用程序构建,而不是用于构建应用程序。求助:
您通常不需要使用这些功能来创建/运行 应用;它们旨在用于互操作目的,例如 将Shiny apps嵌入knitr文档中。
deployApp
不支持shinyApp
个应用,正如您可能从?deployApp
找到的那样。也就是说,通过或多或少地将您的命令粘贴到名为ui.R
和server.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(即数据预处理),则需要将它们粘贴到相关文件中的闪亮调用之上。如果您使用参数调用闪亮的应用程序,您可以将它们硬编码到闪亮的调用之上,或者将它们作为反应值集成在闪亮的本身中。