Rによる解析結果をShinyでインタラクティブにプレゼンテーションしよう
数理モデルの数値解析や統計解析では、パラメーターを色々といじったり、変数や分析期間を変えたりして計算をやり直したり、結果の一部分を切り取って参照したいときがあります。プログラムをぽちぽちと変えていけば実現できるわけですが、ぱっと見ではそのコードを書いている人以外は何をしているのか理解できないので、それは説明には向いていないやり方です。
文章に結果をまとめる都合もあり、あらかじめ多種多様な分析結果を用意しておくことが多いと思いますが、GUIのフォームに入力したパラメーターに応じてリアルタイムに表示を変えて見せるのも有効な手段です。RはGUIアプリケーションの構築に向かないツールですが、RStudio社が出しているShinyパッケージで手早く入力フォームの構築と処理を書くことができます*1
1. Shinyの使い方
やり方を説明しようと思ったのですが、公式ページからたどれるドキュメントが十分によく整備されているので説明すべきことが残されていません。英語が苦手な人でも、
install.packages("shiny")
をした後に、
library(shiny) # CTRL+CかSTOPボタンで中断 runExample("01_hello")
と例を表示させると、そこに例のコードも表示されているので、何となく使い方が分かることでしょう。なお、例はインストールされたshinyパッケージのフォルダーの中のexamplesフォルダーに格納されていて、01_hello, 02_text, 03_reactivity, 04_mpg, 05_sliders, 06_tabsets, 07_widgets, 08_html, 09_upload, 10_download, 11_timerの11種類があります。
2. 実例
例も豊富なので無用感もあるのですが「Rでエッジワース・ボックスを描こう」で使ったコードを関数化して、Shinyを通してプロットする(ローカルで動かす)ウェブ・アプリケーションを作成してみました。ソースコードの全体はMercurialのリポジトリにして公開しているので、そちらを参照してください。
そこそこそれっぽく動くと思いますが、Shinyのための作業は
- コード例01_helloにスライドバーとチェックボックスを追加
- グラフィックス・デバイスの指定部分を含まないプロット部分を、スライドバーやチェックボックスからの入力に対応した引数を持つ関数化
- コントロール(フォーム)に変更があった場合に呼ばれる関数serverの中のrenderPlotの中のhist関数を、前段の作業でつくったdrawEdgeworthBox関数に置換
したぐらいです。統計解析とちがって見栄えが全てだけに、習うより慣れろ系のツールですね。
3. RADとして使う分には便利
迅速開発ツール(RAD)なので、楽をする範囲では*2レイアウトに制約が大きく、独自仕様のコントロールをつくったりはできないですが、数値解析のパラメーターを変えて見るのには十分な機能だと思います。
なお、スライドバーやチェックボックスなどの配置するコントロールを規程する関数の引数themeにBootstrap theme objectを与えると、色調や利用フォントを変えられます。例えば、
ui <- fluidPage( theme = bslib::bs_theme(bootswatch = "minty"),
というようにすると、テーマmintyが適応されて全体の色合いが調整されます。利用できるパッケージ内蔵テーマは
bootswatch_themes()
で一覧することができ、内蔵していないのは、
ui <- fluidPage( theme = "path/to/bootstrap.css",
というような感じで、ファイル参照して利用することができるようです。
さらに、入力フォームの定義にも結果の出力にもwithMathJax関数でTeX記法が使えるので、見栄えはそこそこの説明資料としては十分に機能するはずです。