Каковы наилучшие методы организации более крупных блестящих приложений?
Я считаю, что лучшие методы R применимы и к R Shiny.
Лучшие практики R обсуждаются здесь: Как организовать большие программы R
Ссылка на руководство по стилю Google R: Руководство по стилю
Но каковы уникальные советы и трюки в контексте R Shiny, которые я могу принять, чтобы сделать мой R-блестящий код лучше (и более читаемым)? Я думаю о таких вещах, как:
- Использование объектно-ориентированного программирования в R блестящем
- В server.R какие части должны быть получены?
- Иерархия файлов проекта, содержащая документы, рисунки, xml и исходные файлы
Например, если я использую navbarPage
и tabsetPanel
в каждом tabPanel
, мой код начинает выглядеть довольно беспорядочным после добавления нескольких элементов пользовательского интерфейса.
Пример кода:
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 и на сервере .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)