4.4 サンプルアプリにカスタマイズを加える
ここでは、サンプルアプリを改造して、自分の好きなようにカスタマイズしてみよう。
これまでの流れから、shinyのアプリが本質的にはui.R
とserver.R
という二つのスクリプトファイルに書いてある内容によって定義されていることが掴めただろう。
4.4.1 ui.R
ui.R
というスクリプトは、ユーザーインターフェースつまりアプリの見た目を定義するスクリプトである。
今回の例を見てみよう。
fluidPage()
という関数で、Shinyアプリの見た目を定義している。この関数の引数として、titlePanel()
とsidebarLayout()
とmainPanel()
とsliderInput()
という関数が呼び出されている。
これらの関数はそれぞれ、アプリのタイトル、サイドバー、メインパネルを定義している。
例えば、titlePanel()
の引数には"Hello Shiny!"
という文字列が渡されている。ここを変更してみよう。
"Hello Shiny!"
を"Hello Shiny! I'm a Shiny App!"
に変更して再度Run Appを押してアプリを実行すると、タイトルが変更されていることが確認できるだろう。
次にsliderInput()
を変更してみよう。sliderInput()
はスライダーバーを定義する関数である。
inputId
という引数に与えられる文字列は、server.R
で定義されているinput$
の後に続く文字列として利用される。
今回は個々を変更しないが、もし変更する場合はserver.R
のinput$
の後に続く文字列も変更する必要があることに注意しよう。
さて、残りの引数としては、label
とmin
とmax
とvalue
がある。これらはそれぞれ
label
: スライダーバーの表示ラベルmin
: スライダーバーの最小値max
: スライダーバーの最大値value
: スライダーバーの初期値
と対応している。max
を100にして、value
を20にしてReload Appをしてみよう。
このときスクリプトを保存していないと、変更が反映されないことに注意しよう。
次にmainPanel()
内のplotOutput()
を見てみよう。ここではoutputId="distPlot"
という引数が与えられている。
これはserver.R
で実行されたプロットを受け取るためのものであるのでここだけを変更するとアプリが動かなくなるので変更はしない。
4.4.2 server.R
server.R
ではui.R
に応じて、アプリの挙動を定義する。今回の例を見てみよう。
server
というinput, output
を引数にとる関数を定義している。
input
はui.R
で定義された変数が格納されており、それぞれinput$inputId
という形でアクセスできる。
一方output
はui.R
で定義された変数に対応する出力を定義するための変数である。server
側でoutput$outputId
に値を代入すると、ui
側で定義されたoutputId
に対応する出力が更新される。
この例では、output$distPlot
にrenderPlot()
という関数を用いてプロットを代入している。
renderPlot()
はui
側で定義されたoutputId
に対応する出力を定義するための関数である。
renderPlot()
の中身を詳しく見ていこう。
output$distPlot <- renderPlot({
x <- faithful$waiting
bins <- seq(min(x), max(x), length.out = input$bins + 1)
hist(x, breaks = bins, col = "#75AADB", border = "white",
xlab = "Waiting time to next eruption (in mins)",
main = "Histogram of waiting times")
})
{}
で囲まれた部分のスクリプトの最後にhist()
でヒストグラムをプロットしており、これがoutput$distPlot
に代入されることになる。
それより上のコードはヒストグラムを作成するための準備のためのコードである。
x
にはfaithful$waiting
が代入されているが、これはfaithful
というデータフレームのwaiting
という列を抽出している。
このx
に別のデータを代入すると、ヒストグラムの表示が変わる。例えば、
x <- iris$Sepal.Length
などとしてみよう。
また、bins
にはseq()
という関数を用いて、min(x)
からmax(x)
までの数値をinput$bins + 1
個生成している。これがヒストグラムのビンの数に対応している。
hist()
関数については以前説明したので割愛する。xlab, main
といった引数に与えられている文字列を変更すれば、ヒストグラムのラベルやタイトルを変更できる。