带有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】:

据我了解,shinyAppDirshinyApp 都可以实现您想要的功能。你只需要正确使用它们。 如果您有 3 个文件结构,即 ui.Rserver.Rglobal.R。您应该使用shinyAppDir 而不是shinyApp。在global.R 中,您可以定义要全局运行的代码,如果它在一个函数中,您可以在同一个文件(即global.R)中定义然后调用该函数。为了使用shinyAppDir 运行它,您需要提供放置应用程序文件的目录。

根据您共享的同一 shinyApp 参考,

shinyAppDir(appDir, options = list())

如果您想改用shinyApp,则需要将uiserver 放在同一个文件中,并将对象名称 传递给shinyApp 函数。在这里,如果你想全局运行一些代码,你需要先在函数在同一个文件中定义该代码,然后将该函数name作为@ 987654337@ 参数。如果您的函数名称是test,则需要将其传递为shinyApp(ui, server, onStart = test) 而不是test(),但更重要的是,您需要拥有所有3 个(uiserver,以及您的全局函数,即test ) 在同一个文件中。

根据参考,

shinyApp(ui, server, onStart = NULL, options = list(),   uiPattern = "/", enableBookmarking = NULL)

【讨论】:

以上是关于带有ui和服务器的shinyApp在单独的文件中?的主要内容,如果未能解决你的问题,请参考以下文章

将悬停工具提示添加到shinyapps.io

NX - 带有 Storybook 和单独导出组件的 UI 库

R 闪亮 - 图像不出现

带有片段的两个面板 UI 与单独的活动

将 csv 文件上传到 shinyApps.io

用户选择/多输入上的多个单独图