带有ui和服务器的shinyApp在单独的文件中?
Posted
技术标签:
【中文标题】带有ui和服务器的shinyApp在单独的文件中?【英文标题】:shinyApp with ui and server in separate files? 【发布时间】:2020-09-03 19:11:47 【问题描述】:现在我的 shinyApp 正在运行四个单独的 R 文件。 app.R、server.R、ui.R 和 global.R。这显然是一种旧的做事方式,但我喜欢它组织我的代码的方式。
我需要在shinyApp()
函数中使用onStart
参数。由于我分离文件的方式,看起来 R 在 R Studio 中运行“运行应用程序”按钮时知道将四个文件一起加载。这意味着我的 app.R 文件仅包含 runApp()
。
我似乎无法将 onStart 参数与 runApp()
一起使用。当我尝试创建一个shinyApp(ui, server, onStart = test())
对象并通过runApp()
传递它时,它找不到测试函数。
### in global.R
test <- function()
message('im working')
### in app.R
app <- shinyApp(ui, server, onStart = test())
runApp(app)
我在 R 文档中找到了这个。我不确定使用 global.R 文件是什么意思?
https://shiny.rstudio.com/reference/shiny/latest/shinyApp.html
非常感谢,我希望这个问题有意义。
【问题讨论】:
【参考方案1】:据我了解,shinyAppDir
和shinyApp
都可以实现您想要的功能。你只需要正确使用它们。
如果您有 3 个文件结构,即 ui.R
、server.R
和 global.R
。您应该使用shinyAppDir
而不是shinyApp
。在global.R
中,您可以定义要全局运行的代码,如果它在一个函数中,您可以在同一个文件(即global.R
)中定义然后调用该函数。为了使用shinyAppDir
运行它,您需要提供放置应用程序文件的目录。
根据您共享的同一 shinyApp
参考,
shinyAppDir(appDir, options = list())
如果您想改用shinyApp
,则需要将ui
和server
放在同一个文件中,并将对象名称 传递给shinyApp
函数。在这里,如果你想全局运行一些代码,你需要先在函数在同一个文件中定义该代码,然后将该函数name作为@ 987654337@ 参数。如果您的函数名称是test
,则需要将其传递为shinyApp(ui, server, onStart = test)
而不是test()
,但更重要的是,您需要拥有所有3 个(ui
、server
,以及您的全局函数,即test
) 在同一个文件中。
根据参考,
shinyApp(ui, server, onStart = NULL, options = list(), uiPattern = "/", enableBookmarking = NULL)
【讨论】:
以上是关于带有ui和服务器的shinyApp在单独的文件中?的主要内容,如果未能解决你的问题,请参考以下文章