2019-09-01

R Shiny の actionButton

Shiny は R のパッケージの一つで、 このパッケージを使うと R を用いて対話的に操作する Web アプリケーションを作成することができます。Web 上のユーザーインタフェース部分を司る ui.R と、内部動作を司る server.R の二つの R 言語スクリプトで、サーバーサイドのコンテンツを作成できることが大きな特徴です。

参考サイト [1] より引用

actionButton のニーズ

Shiny で作る Web アプリはウィジェットを操作して動的にプロットなどに反映させることができます。しかし複数の selectInput などを選択する必要があって、かつ個々のプロットを描画するのにデータ量や計算量の関係で少々時間がかかるような時には、描画条件を選択する度にプロットが更新され、目的のプロットを描画するまでに待たされてイライラすることがあります。

そんな時には条件を全て選択して更新ボタンをクリックするようにすれば、イライラを解消できます。Shiny ではこのような時のために submitButton というウィジェットが用意されています。しかしこのボタンは単純な用途に用いる時には有効ですが、より複雑で汎用な用途には actionButton を使うことが推奨されています。

そこで簡単なサンプルですが、actionButton を用いたサンプルを作って備忘録としました。使用した環境は以下の通りです。

OS Fedora 30 (x86_64)
R R-core-3.6.0-1.fc30.x86_64
RStudio rstudio-1.2.1335-1.x86_64
shiny 1.3.2

以下に actionButton を使ったサンプルを示しました。これは RStudio で新規に Shiny Web App を作成した時に生成されるスケルトンに少々手を加えたものです。

リスト: ui.R 
library(shiny)

shinyUI(fluidPage(
    titlePanel("Old Faithful Geyser Data"),
    sidebarLayout(
        sidebarPanel(
            sliderInput("bins",
                        "Number of bins:",
                        min = 1,
                        max = 50,
                        value = 30),
            actionButton("goButton", "Plot")
        ),
        mainPanel(
            plotOutput("distPlot")
        )
    )
))
リスト: server.R 
library(shiny)

shinyServer(function(input, output) {
    nbins <- eventReactive(input$goButton, {
        input$bins
    })
    output$distPlot <- renderPlot({
        x    <- faithful[, 2]
        bins <- seq(min(x), max(x), length.out = nbins() + 1)
        hist(x, breaks = bins, col = 'darkgray', border = 'white')
    })
})

このアプリを実行した直後は右側にヒストグラムは表示されません。

左側の Plot ボタンをクリックすると、右側にヒストグラムが表示されます。

左側のスライダの値を変更しても右のヒストグラムは変化しません。

左側の Plot ボタンをクリックすると、右側にヒストグラムにスライダに設定した値の bin が反映されます。

参考サイト

  1. Shiny - Using Action Buttons

 

ブログランキング・にほんブログ村へにほんブログ村

0 件のコメント: