FlexDashboard rmarkdown
http://rmarkdown.rstudio.com/flexdashboard/
cf> ShinyDashboard https://rstudio.github.io/shinydashboard/
cf> tableau https://www.tableau.com
CSS
FlexDashboard
개인적으로 굳이 runtime:shiny 안 쓰고, 단지 flexdashboard만을 사용하여 껍데기를 구성하여(Html 맹글어서 접속하는데 사용하고)
별도의 Shiny App을 embedded하는게 낫지 않을까 싶다.
패키지 설치
> install.packages("flexdashboard")
--- title: "Flexboard" output: flexdashboard::flex_dashboard: orientation: rows vertical_layout: fill --- ```{r global, include=FALSE} ``` Page 1 =========================================================== [linked phrase](./chapter1.html){target="_blank"} Page 2 =========================================================== row1 {data-height=90%} ------------------------------------------------- ### Histogram {.no-title} ```{r} ``` row2 {data-height=10%} ------------------------------------------------- ### Description Hitogram 그리고, row별로 나누기
http://rmarkdown.rstudio.com/formats.html
http://rmarkdown.rstudio.com/flexdashboard/
FlexDashboard 에 Shiny 적용 (runtime: shiny)
http://rmarkdown.rstudio.com/flexdashboard/layouts.html#input_sidebar_(global)
1. Layout
# (======)
## (——)
Single Column (Fill, scroll), Multiple Columns, Multiple Rows
- YAML헤더에
runtime: shiny
추가 - 첫번째 Column에
{.sidebar}
추가
2. Components
### 이하의 요소들은 모두 컴포넌트 (html widgets, R plot, table, value box, gauge ….)
Output으로 flexdashboard 팩키지의 flex_dashboard함수를 사용한다.
ex1> With Sidebar
https://beta.rstudioconnect.com/jjallaire/shiny-eruptions/
문제점: 상단 메뉴가 변해도 Sidebar가 안 변함.
--- title: "Shiny with Flexboard" output: flexdashboard::flex_dashboard: orientation: rows runtime: shiny vertical_layout: fill --- ```{r global, include=FALSE} library(datasets); data(faithful) #library(showtext); font.add("myfont","NanumGothic.ttc") ``` Sidebar {.sidebar} =========================================================== Shiny wideget {.no-title} ------------------------------------------------- ### Input widget {.no-title} ```{r} selectInput("n_breaks", label = "No.of bins:", choices = c(10, 20, 35, 50), selected = 20) sliderInput("bw_adjust", label = "Bandwidth:", min = 0.2, max = 2, value = 1, step = 0.2) ``` Page 1 =========================================================== TAB {.tabset} ------------------------------------------------- ### component1 ```{r} ``` ### component2 ```{r} ``` Page 2 =========================================================== row1 {data-height=90%} ------------------------------------------------- ### Histogram {.no-title} ```{r} renderPlot({ hist(faithful$eruptions, probability=T, breaks= as.numeric(input$n_breaks), xlab="Duration (minutes)", main="Geyser Eruption Duration") dens <- density(faithful$eruptions, adjust = input$bw_adjust) lines(dens, col = "blue") }) ``` row2 {data-height=10%} ------------------------------------------------- ### Description Hitogram 그리고, row별로 나누기
ex2> Without Sidebar, Embeding Shiny
https://beta.rstudioconnect.com/jjallaire/shiny-embedding/
--- title: "flexdashboard: Shiny Embedding" output: flexdashboard::flex_dashboard: #social: menu source_code: embed runtime: shiny --- ```{r global, include=FALSE} library(datasets) data(WorldPhones) ``` Module ============================================================ ### Embedding a Shiny Module ```{r, include=FALSE} ############################################################ ## ## Shiny module definition (typically using separate Rscript) ## ############################################################ # UI function worldPhonesUI <- function(id) { ns <- NS(id) fillCol(height = 600, flex = c(NA, 1), inputPanel( selectInput(ns("region"), "Region:", choices = colnames(WorldPhones)) ), plotOutput(ns("phonePlot"), height = "100%") ) } # Server function worldPhones <- function(input, output, session) { output$phonePlot <- renderPlot({ barplot(WorldPhones[,input$region]*1000, ylab = "Number of Telephones", xlab = "Year") }) } ``` ```{r} # Include the module worldPhonesUI("phones") callModule(worldPhones, "phones") ``` Inline App ======================================================================= ### Inline Shiny App via shinyApp ```{r} shinyApp( ui = fillPage( fillCol(flex = c(NA, 1), inputPanel( selectInput("region", "Region:", choices = colnames(WorldPhones)) ), plotOutput("phonePlot", height = "100%") ) ), server = function(input, output) { output$phonePlot <- renderPlot({ barplot(WorldPhones[,input$region]*1000, ylab = "Number of Telephones", xlab = "Year") }) }, options = list(height = 600) ) ``` External App ======================================================================= ### External Shiny App via shinyAppDir ```{r} shinyAppDir( system.file("examples/06_tabsets", package="shiny"), options = list(height=850) ) ```
컨터이너의 크기에 맞게, Flexible하게 배치
fillPage(), fillCol(), fillRow()
http://shiny.rstudio.com/articles/gadgets.html
http://shiny.rstudio.com/articles/gadget-ui.html