大綱

2.1 shiny函數總覽

2.2 下拉式選單範例(“02_text”)

2.3 文字方塊範例(“03_reactivity”)

2.4 習題

2.5 結論

2.1 shiny函數總覽

  • 線上文件

  • shiny函數總表-15個類別

  • 輸入函數

  • 輸出函數與渲染函數

線上文件

  • Shiny RStudio \ Reference \ Latest version -> Shiny v1.7.4

shiny函數總表-15個類別

函數 主題
1.UI Layout *佈置
2.UI Inputs *輸入
3.UI Outputs *輸出
4.Interface builder functions HTML函數
5.Rendering functions *渲染函數
6.Reactive programming 反應程式
7.Running 執行
8.Bookmarking state 標記狀態
9.Extending Shiny 擴充Shiny
10.Utility functions 工具函數
11.Plot interaction 互動繪圖
12.Modules 模組
13.Embedding 第三方嵌入
14.Testing 測試
15.Superseded 不再使用(停用)函數

輸入函數

輸入函數 主題
actionButton 每次按鈕+1
checkboxGroupInput 核取方塊-群組
checkboxInput 核取方塊 (用於YES/NO)
dateInput 選取單一日期
dateRangeInput 選取日期範圍 (開始-結束)
fileInput 上傳檔案
helpText 輔助說明
numericInput 數值輸入
radioButtons 選取按鈕 (單選題)
selectInput 下拉式選單
sliderInput 左右滑桿
submitButton 送出按鈕
textInput 文字方塊

輸出函數(Output)與渲染函數(render)

使用時機 輸出函數ui 渲染函數server
table 表格 dataTableOutput renderDataTable
table 表格 tableOutput renderTable
image 圖片 imageOutput renderImage
plot 繪圖 plotOutput renderPlot
raw HTML htmlOutput renderUI
raw HTML uiOutput renderUI
text 文字 textOutput renderText
text 文字 verbatimTextOutput renderPrint

“01_hello”總覽

library(shiny)
ui <- fluidPage(    # 佈置函數
    sidebarLayout(    # 佈置函數
        sidebarPanel(   # 佈置函數
            sliderInput() # 輸入函數
        ),
        mainPanel(      # 佈置函數
            plotOutput()  # 輸出函數
        )   
    )
)
server <- function(input, output) {
    output$distPlot <- renderPlot({   # 渲染函數
        ...
        hist(...) # R函數
    })
}
shinyApp(ui = ui, server = server)

2.2 下拉式選單範例(“02_text”)

library(shiny)
runExample("02_text")

認識02_text(找出下拉式選單?)

library(shiny)

# Define UI for dataset viewer app ----
ui <- fluidPage(
  
  # App title ----
  titlePanel("Shiny Text"),
  
  # Sidebar layout with a input and output definitions ----
  sidebarLayout(
    
    # Sidebar panel for inputs ----
    sidebarPanel(
      
      # Input: Selector for choosing dataset ----
      selectInput(inputId = "dataset",
                  label = "Choose a dataset:",
                  choices = c("rock", "pressure", "cars")),
      
      # Input: Numeric entry for number of obs to view ----
      numericInput(inputId = "obs",
                   label = "Number of observations to view:",
                   value = 10)
    ),
    
    # Main panel for displaying outputs ----
    mainPanel(
      
      # Output: Verbatim text for data summary ----
      verbatimTextOutput("summary"),
      
      # Output: HTML table with requested number of observations ----
      tableOutput("view")
      
    )
  )
)

# Define server logic to summarize and view selected dataset ----
server <- function(input, output) {
  
  # Return the requested dataset ----
  datasetInput <- reactive({
    switch(input$dataset,
           "rock" = rock,
           "pressure" = pressure,
           "cars" = cars)
  })
  
  # Generate a summary of the dataset ----
  output$summary <- renderPrint({
    dataset <- datasetInput()
    summary(dataset)
  })
  
  # Show the first "n" observations ----
  output$view <- renderTable({
    head(datasetInput(), n = input$obs)
  })
  
}

# Create Shiny app ----
shinyApp(ui = ui, server = server)

重要函數

  • ui: selectInput 下拉式選單, verbatimTextOutput 文字輸出
  • ui: numericInput 數值輸入, tableOutput 表格輸出
  • server: renderPrint 渲染列印
  • server: renderTable 渲染表格
  • datasetInput <- reactive({…}) 反應函數

2.3 文字方塊範例(“03_reactivity”)

  • 執行範例
library(shiny)
runExample("03_reactivity")
  • ui: textInput()
  • server: h3(textOutput(…))

2.4 習題: 使用iris建立shiny功能

  • ui:

    • 下拉式選單 selectinput: 包括iris的前4個數值變數名稱

    • 滑桿 sliderInput: 用於直方圖的bins

    • 核取方塊 checkboxInput: 打勾表示直方圖加上密度圖(density plot)

  • server:

    • 前4個變數的散佈圖矩陣pairs, 圖形樣式為實心圓形, 顏色依 Species 變數為群組

    • 選取變數的直方圖hist

    • 核取方塊加上機率密度圖density

習題成果

2.5 結論

  • 理解shiny函數總覽

  • 輸入函數🔄輸出函數🔄渲染函數

  • 認識 “02_text” 範例

  • 認識 “03_reactivity” 範例

  • 習題(解答…第3集)

參考資料

  1. Reference: https://shiny.rstudio.com/reference/shiny/1.7.4/
  2. 下拉式選單 selectinput: https://shiny.rstudio.com/reference/shiny/1.7.4/selectinput/
  3. 數值輸入 numericInput: https://shiny.rstudio.com/reference/shiny/1.7.4/numericinput

THANK YOU😃