2018-09-30

R Shiny を使ってみる (5)

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

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

RStudio 上で Shiny による Web アプリケーションを作り始めたので、理解したことを備忘録としてまとめたことを不定期に紹介していきます。

自分が R を使って解析したい特定の分野について、Web アプリケーションを作成し、参考サイト [2] にある Shiny Server を Linux で稼働させて、作った Web アプリケーションを利用できるようにすることが目標です。しかし現時点では、その Web アプリケーションを作るだけの知識が伴っていないので、しばらくの間、簡単なサンプルで試行錯誤を続けて、判ったことをまとめていきたいと思います。

本記事で使用している動作環境は次の通りです。

  • OS: Fedora 29 beta (x86_64)
  • R: R-core-3.5.1-1.fc29.x86_64, R-core-devel-3.5.1-1.fc29.x86_64
  • RStudio: rstudio-server-1.1.456-1.x86_64

Web App の作成 : Iris explorer ver. 3.0

前回の Shiny の記事 [3] で紹介した Iris explorer ver. 2.1 をベースにして、shinydashboard パッケージを用いたレイアウトに変更してみました。

まず、実行例を以下に示しました。

Iris explorer ver. 3.0 の実行例

shinydashboard パッケージによるレイアウト

shinydashboard パッケージによるレイアウトの基本構成は以下のようになっています。

リスト:ダッシュボードの基本構成 (ui.R) 
library(shiny)
library(shinydashboard)

dashboardPage(
  dashboardHeader(),  # ヘッダー部分
  dashboardSidebar(), # サイドバー部分
  dashboardBody()     # ボディー(メイン)部分
)
Shiny Dashboard の基本構成

ヘッダー部分は、このアプリケーションではアプリケーション名を文字列で定義しているだけです。

リスト:ダッシュボードのヘッダー部分 
dashboardPage(
  dashboardHeader(title = "..."),
    ...
    ...
)

ちなみに、ヘッダーのタイトル右側にある ☰ をクリックするとサイドバーの部分を非表示/表示にすることができます。

サイドバーの表示/非表示

左側のサイドバーの部分には、メニュー (sideBarMenu) を利用してメニューアイテム (menuItem) とその下にサブメニュー (menuSubItem) を定義しています。このサブメニューで、サブメニューに表示する文字列と、サブメニューをクリックした時にボディー(メイン)の部分に表示するタブの名前を定義しています。このタブの名前は、ボディーの部分で対応させます。

リスト:ダッシュボードのサイドバー部分 〜 メニューのタブの設定 
dashboardPage(
    ...
  dashboardSidebar(
    sidebarMenu(
      menuItem(
        "Menu Name",
        menuSubItem("Sub Menu Name 1", tabName = "Tab Name 1"),
        menuSubItem("Sub Menu Name 2", tabName = "Tab Name 2"),
           ...
           ...
        menuSubItem("Sub Menu Name N", tabName = "Tab Name N")
      )
    )
  ),
    ...
)

ボディーの部分には、サイドバーで定義したタブの名前に対応するタブアイテム (tabItem) を定義して、そこに表示するプロットやウィジェットのレイアウトを記載します。

リスト:ダッシュボードのボディー部分 〜 タブ画面のレイアウト 
dashboardPage(
     ...
     ...
  dashboardBody(
    tabItems(
      tabItem(
        "Tab Name 1",
           ...
           ...
      ),
      tabItem(
        "Tab Name 2",
           ...
           ...
      ),
         ...
         ...
      tabItem(
        "Tab Name N",
           ...
           ...
      )
    )
  )
)

サンプルコード

このサンプルのコードを紹介します。今回は global.R を加えた以下の三種類のファイルです。この global.R はアプリケーションが起動する前に実行されます。global.R で生成されたオブジェクトは ui.Rserver.R からアクセスできます [4]

  1. global.R
  2. ui.R
  3. server.R

global.R を以下に示しました。パッケージのロードとアプリケーションのバージョン情報および ggplot2 で使用する共通のテーマを記載しています。

リスト:global.R 

ui.R を以下に示しました。

リスト:ui.R 

server.R を以下に示しました。この部分は、前回の Shiny の記事 [3] で紹介した Iris explorer ver. 2.1 の server.R と同じ内容です。

リスト:server.R 

まとめ

以上、簡単なサンプルでも shinydashboard パッケージを利用すれば、格好の良いレイアウトで簡単に実行できるようになるので、もしかしたら自分でも実用的なスバラシいアプリを作ることができるかもしれない、という幻想を抱かせてくれます…もとい、開発意欲を駆り立ててくれます。

実際に本格的なアプリケーションを構築しようとすれば、いろいろな問題に直面することが予想されますが、とにかく業務で使っている R のコードを Shiny で動くようにすることを検討しています。ひきつづき本ブログ記事では、関連する情報を簡単なサンプルを使って備忘録的にまとめていきたいと考えています。

参考サイト

  1. Shiny - RjpWiki
  2. Download Shiny Server - RStudio
  3. bitWalk's: R Shiny を使ってみる (4)
  4. An introduction to global.R - Learning Shiny

 

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

0 件のコメント: