03_reactivityは、inputとoutputがどのようにreactiveに変化するのかを説明する例。02_textと同様の変数や関数で、input$dataset, input$caption, output$caption, output$viewそれぞれの計算に依存関係がある場合に、どの変数を変えると、どの出力がreactiveに変化するのか理解できる例になっています。
「03_reactivity」の実行
library(shiny) runExample("03_reactivity")
server.R
library(shiny) library(datasets) # 選択されたデータセットのsummaryと全体を表示するためのサーバ側を定義 function(input, output) { # datasetInputをreactiveな式として宣言 # 1) reactiveなので、入力が変化したときだけ呼ばれる # 2) 計算結果は、すべての関数呼び出しで共有される datasetInput <- reactive({ switch(input$dataset, "rock" = rock, "pressure" = pressure, "cars" = cars) }) # output$captionは、input$captionが返す値の変化に合わせてreactiveに値を変える # # ただし、以下のoutput$summaryは、input$captionに依存しないので、input$captionを変えても # reactiveに変化しない output$caption <- renderText({ input$caption }) # reactiveなdatasetInputに合わせて、output$summaryの結果が変化 # datasetInputの結果が変わるのは、input$datasetが変わったときなので、 # 入力が変わったときに、output$summaryはreactiveに値を変化させる output$summary <- renderPrint({ dataset <- datasetInput() summary(dataset) }) # output$viewはdatasetInput()とinput$obs両方に依存して値が変わるので、 # 入力のinput$datasetとinput$obsのどちらか一方でも変化した場合に、reactiveに値を変える output$view <- renderTable({ head(datasetInput(), n = input$obs) }) }
Code license:MIT
datasetInputは、
switch()
の引数で指定したinput$datasetの値が変わると動的に値が変化output$captionは、input$captionの値が変わると動的に値が変化
output$summaryは、
datasetInput()
の値が変化したとき、すなわちinput$datasetが変化したときに値が変化。input$obsを変えても変化しないoutput$viewは、
datasetInput()
とinput$obsの2つのどちらか一方でも変化したときに値が変化
ui.R
library(shiny) # データセットビューワのUIを定義 fluidPage( # タイトル titlePanel("Reactivity"), # サイドバーには、caption, データセット選択, 表示するデータ数入力の3つのコントロール # captionを変えたときには、出力が直ちに変化する sidebarLayout( sidebarPanel( textInput("caption", "Caption:", "Data Summary"), selectInput("dataset", "Choose a dataset:", choices = c("rock", "pressure", "cars")), numericInput("obs", "Number of observations to view:", 10) ), # captionとデータセットのsummary、入力された数のデータセットのHTML表示 mainPanel( h3(textOutput("caption", container = span)), verbatimTextOutput("summary"), tableOutput("view") ) ) )
Code license:MIT
sideberPanel()
で、3つのコントロールtextInput, selectInput, numericInputをサイドバーに配置mainPalen()
で、3つのコントロールh3, verbatimTextOutput, tableOutputを配置h3は、h3の大きさの文字列を配置
verbatimTextOutput()
で、summaryで指定された文字列をそのまま出力tableOutput()
で、viewで指定された表をHTML出力