observeEvent() で反応をトリガーする
イベントに応じて処理を実行したい場面があります。 たとえば、ユーザーが「Download」ボタンをクリックしたら、テーブルを CSV ファイルとしてダウンロードできるようにしたいかもしれません。あるいは、クリックに応じて通知やモーダルダイアログを表示したい場合もあります。
observeEvent() 関数を使うと、これを実現できます。引数は次の 2 つです。
- 反応したいイベント。
- そのイベントが起きたときに呼び出す関数。
この演習では、ユーザーが「Help」というラベルのボタンをクリックしたときに、ヘルプテキストを含むモーダルダイアログを表示するために observeEvent() を使います。ヘルプテキストはすでに変数 bmi_help_text に代入されています。
この演習はコースの一部です
Rで作るShiny Webアプリケーション
演習の手順
- UI:
- 'show_help' という名前で、ラベルが "Help" のアクションボタンを追加します。UI を表示するには、下にスクロールするかコンソールを折りたたむ必要がある場合があります。
- Server:
# showModal ...のコメントアウトを解除します。- ヘルプボタンがクリックされたときにヘルプテキストが表示されるように、
showModal(...)をobserveEvent()でラップします。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
ui <- fluidPage(
titlePanel('BMI Calculator'),
sidebarLayout(
sidebarPanel(
textInput('name', 'Enter your name'),
numericInput('height', 'Enter your height in meters', 1.5, 1, 2),
numericInput('weight', 'Enter your weight in Kilograms', 60, 45, 120),
actionButton("show_bmi", "Show BMI")
# CODE BELOW: Add an action button named "show_help"
),
mainPanel(
textOutput("bmi")
)
)
)
server <- function(input, output, session) {
# MODIFY CODE BELOW: Wrap in observeEvent() so the help text
# is displayed when a user clicks on the Help button.
# Display a modal dialog with bmi_help_text
# MODIFY CODE BELOW: Uncomment code
# showModal(modalDialog(bmi_help_text))
rv_bmi <- eventReactive(input$show_bmi, {
input$weight/(input$height^2)
})
output$bmi <- renderText({
bmi <- rv_bmi()
paste("Hi", input$name, ". Your BMI is", round(bmi, 1))
})
}
shinyApp(ui = ui, server = server)