shinydashboard
,
shinydashboardPlus
대쉬보드 패키지를 설치하여 제품 웹앱 외양을 갖춘다. 기본적인 골격을 잡기
때문에 shinipsum
패키지를 설치하여 개발하고자하는 대쉬보드 기본기능을 갖췄는지 빠르게
점검한다.
library(DiagrammeR)
::mermaid(
DiagrammeRdiagram = 'graph LR
A[개요 모듈] --> B[대쉬보드]
C[로렘입숨 모듈] --> B
D[... 모듈] --> B
B --> K[테스트]
K --> G[배포]'
)
shinipsum
팩키지를 사용해서 기본 데모 모듈을
작성한다.
#' shinipsum UI Function
#'
#' @description A shiny Module.
#'
#' @param id,input,output,session Internal parameters for {shiny}.
#'
#' @noRd
#'
#' @importFrom shiny NS tagList
<- function(id){
mod_shinipsum_ui <- NS(id)
ns tagList(
fluidPage(
fluidRow(
column(width = 5,
h2("환영합니다.")),
br(),br(),br()
),fluidRow(
column(width = 10,
::box(
shinydashboardbackground = "blue",
h2("첫 타이틀"),
title = "Congrats!"),
br(), br(), br(), br()
)),fluidRow(
::box(
shinydashboardtitle = "인터랙티브 표",
width = 6,
::dataTableOutput(ns('data_table'))),
DT::box(
shinydashboardtitle = "그래프",
width = 6,
plotOutput(ns("plot"))
)
)
)
)
}
#' shinipsum Server Functions
#'
#' @noRd
<- function(id){
mod_shinipsum_server moduleServer( id, function(input, output, session){
<- session$ns
ns
$data_table <- DT::renderDT({
output::random_DT(5, 3, "numeric")
shinipsum
})
$plot <- renderPlot({
output::random_ggplot(type = "line")
shinipsum
})
}) }
텍스트로 구성된 server
로직이 전혀 없는 모듈도 하나
제작한다.
#' 지방선거 개요 UI 함수
#'
#' @description 지방선거 웹앱 설명.
#'
#' @param id,input,output,session Internal parameters for {shiny}.
#'
#' @noRd
#'
#' @importFrom shiny NS tagList
#'
<- function(id){
mod_overview_ui <- NS(id)
ns tagList(
h1("제8회 지방선거 대쉬보드"),
hr(),
h2("개발조직"),
br(),
$div(
tags$ul(
tags$li("한국 R 사용자회")
tags
)
),h2("데이터"),
br(),
$div(
tags$ul(
tags$li("중앙선거관리 위원회"),
tags$li("중앙여론조사 심의위원회"),
tags$li("공공데이터 포털")
tags
)
),h2("개발환경"),
br(),
$div(
tags$ul(
tags$li("shiny"),
tags$li("golem"),
tags$li("shinydashboard")
tags
)
),h2("개발범위"),
br(),
$div(
tags$ul(
tags$li("성남시장"),
tags$li("경기지사")
tags
)
)
)
}
#' 지방선거 개요 서버 함수
#'
#' @noRd
<- function(id){
mod_overview_server moduleServer( id, function(input, output, session){
<- session$ns
ns ## 서버로직 없음.
}) }
app_ui.R
파일에 대쉬보드 UI shinydashboard
패키지로 와이어프레임으로 작성한 대로 반영한다.
#' The application User-Interface
#'
#' @param request Internal parameter for `{shiny}`.
#' DO NOT REMOVE.
#' @import shiny
#' @noRd
<- function(request) {
app_ui
tagList(
# tags$style("@import url(https://use.fontawesome.com/releases/v5.7.2/css/all.css);"),
# Leave this function for adding external resources
golem_add_external_resources(),
# Your application UI logic
::dashboardPage(
shinydashboardskin = "black",
header = shinydashboard::dashboardHeader(
title = "제8회 지방선거"
),
::dashboardSidebar(
shinydashboard::sidebarMenu(
shinydashboard::menuItem("개요", icon = icon("th"), tabName = "overview"),
shinydashboard::menuItem("로렘입숨", tabName = "ipsum", icon = icon("dashboard"))
shinydashboard
)
),
::dashboardBody(
shinydashboard::tabItems(
shinydashboard::tabItem("overview", mod_overview_ui("mod_overview_1")),
shinydashboard::tabItem("ipsum", mod_shinipsum_ui("mod_shinipsum_1"))
shinydashboard
)
)
)
)
}
#' Add external Resources to the Application
#'
#' This function is internally used to add external
#' resources inside the Shiny application.
#'
#' @import shiny
#' @importFrom golem add_resource_path activate_js favicon bundle_resources
#' @noRd
<- function() {
golem_add_external_resources add_resource_path(
"www",
app_sys("app/www")
)
$head(
tagsfavicon(),
bundle_resources(
path = app_sys("app/www"),
app_title = "대쉬보드"
)# Add here other external resources
# for example, you can add shinyalert::useShinyalert()
) }
server_ui.R
파일에 로렘입숨, 개요 모듈을 각각
반영한다.
#' The application server-side
#'
#' @param input,output,session Internal parameters for {shiny}.
#' DO NOT REMOVE.
#' @import shiny
#' @noRd
<- function(input, output, session) {
app_server
# Your application server logic
mod_overview_server("mod_overview_1")
mod_shinipsum_server("mod_shinipsum_1")
}
대쉬보드 외양을 로고와 favcon 폰트 등 반영한다. 본격적으로 대쉬보드 각 화면을 모듈로 개발하고 이를 실제 운영환경으로 배포한다.
데이터 과학자 이광춘 저작
kwangchun.lee.7@gmail.com