组织更大的 Shiny 应用程序的最佳实践是什么?
我认为最佳 R 实践也适用于 Shiny。
这里讨论了最佳 R 实践: 如何组织大型 R 程序
链接到 Google 的 R Style Guide: 样式指南
但是,在 Shiny 上下文中,我可以采用哪些独特的提示和技巧来使我的 Shiny 代码看起来更好(更具可读性)呢? 我在想这样的事情:
server.R
中应该采购哪些零件?例如,如果我在每个 tabPanel
中都使用 navbarPage
和 tabsetPanel
,那么在添加了几个 UI 元素之后,我的代码看起来就会非常混乱。
示例代码:
server <- function(input, output) {
#Here functions and outputs..
}
ui <- shinyUI(navbarPage("My Application",
tabPanel("Component 1",
sidebarLayout(
sidebarPanel(
# UI elements..
),
mainPanel(
tabsetPanel(
tabPanel("Plot", plotOutput("plot")
# More UI elements..
),
tabPanel("Summary", verbatimTextOutput("summary")
# And some more...
),
tabPanel("Table", tableOutput("table")
# And...
)
)
)
)
),
tabPanel("Component 2"),
tabPanel("Component 3")
))
shinyApp(ui = ui, server = server)
对于组织 ui.R
代码,我从 GitHub 中找到了相当不错的解决方案: 辐射代码
解决方案是使用 renderUI
来渲染每个 tabPanel
和 server.R
标签页都来源于不同的文件。
server <- function(input, output) {
# This part can be in different source file for example component1.R
###################################
output$component1 <- renderUI({
sidebarLayout(
sidebarPanel(
),
mainPanel(
tabsetPanel(
tabPanel("Plot", plotOutput("plot")),
tabPanel("Summary", verbatimTextOutput("summary")),
tabPanel("Table", tableOutput("table"))
)
)
)
})
#####################################
}
ui <- shinyUI(navbarPage("My Application",
tabPanel("Component 1", uiOutput("component1")),
tabPanel("Component 2"),
tabPanel("Component 3")
))
shinyApp(ui = ui, server = server)