ふんわり R-tips

ぜんぜんわからない、俺たちは雰囲気でRをやっている

Shinyサンプルアプリケーション「07_widgets」の説明

07_widgetsは、02_textにhelpTextsubmitButtonといったwidgetsを追加した例です。

「07_widgets」の実行

library(shiny)
runExample("07_widgets")

f:id:phmpk:20161230155834p:plain

server.R

library(shiny)
library(datasets)

# 選択されたデータのsummaryと、入力された数のデータを表示するサーバー側を定義
function(input, output) {
  
  # 選択されたデータセットを返す
  datasetInput <- reactive({
    switch(input$dataset,
           "rock" = rock,
           "pressure" = pressure,
           "cars" = cars)
  })
  
  # データセットのsummaryを生成
  output$summary <- renderPrint({
    dataset <- datasetInput()
    summary(dataset)
  })
  
  # 最初のn個のデータを表示
  output$view <- renderTable({
    head(datasetInput(), n = input$obs)
  })
}

Code license:MIT

  • datasetInputは、switch()の引数で指定したinput$datasetの値が変わると動的に値が変化

  • output$summaryは、datasetInput()の値が変化したとき、すなわちinput$datasetが変化したときに値が変化。input$obsを変えても変化しない

  • output$viewは、datasetInput()とinput$obsの2つのどちらか一方でも変化したときに値が変化

ui.R

library(shiny)

# データセットビューワのUIを定義
fluidPage(
  
  # タイトル
  titlePanel("More Widgets"),
  
  # サイドバーに、データセット選択と表示するデータ数入力を配置
  # helpText関数で、説明用のテキストを追加
  # submitButtonは、入力が変化したときではなく、ユーザにより明示的にボタンが押されたときに
  # はじめて出力が変化するよう動作させるために配置
  # 時間のかかる計算をサーバー側で行っているときに、有効なコントロールに使い方
  sidebarLayout(
    sidebarPanel(
      selectInput("dataset", "Choose a dataset:", 
                  choices = c("rock", "pressure", "cars")),
      
      numericInput("obs", "Number of observations to view:", 10),
      
      helpText("Note: while the data view will show only the specified",
               "number of observations, the summary will still be based",
               "on the full dataset."),
      
      submitButton("Update View")
    ),
    
    # datasetのsummaryと、入力された数のデータをHTMLの表として表示
    # h4関数は、出力の上側に表示する追加のヘッダ
    mainPanel(
      h4("Summary"),
      verbatimTextOutput("summary"),
      
      h4("Observations"),
      tableOutput("view")
    )
  )
)

Code license:MIT

  • helpText()で、複数行に渡る説明文を、文字列としてコントロールの下側に配置

  • submitButtonをサイドバーに配置。reactiveな入力の後でも、submitButtonが押されるまでは出力の表示が変化しない