Shiny Advent Calendar 2018の13日目の記事です。
本記事は、2018年2月に投稿したものを、アドベントカレンダー用に修正と追記を行ったものです。そして、Shiny100本ノック第25弾です。
今回は、データテーブルを表示する機能の、DT::renderDataTableメソッドの紹介をします。
DT::renderDataTableメソッドは、本ブログでも以下の記事にて登場しました。
www.randpy.tokyo
www.randpy.tokyo
いくつか便利なオプション・拡張機能があるので、是非使いこなせるようになりましょう!
DT::renderDataTableの基本的な使い方
まずは、シンプルなコードで基本的な使い方を確認します。server.R
まずはserver.Rから。皆さん大好きのirisデータを読み込んでいます。library(shiny) library(DT) shinyServer(function(input, output) { output$table = DT::renderDataTable(iris) })
ui.R
続いてui.R。server.Rから渡されたtableという変数を元に、「DT::dataTableOutput」してあげれば完了です。library(shiny) library(DT) shinyUI(fluidPage( titlePanel("DT::renderDataTable"), DT::dataTableOutput("table") ))
サンプルコードのイメージ
上のコードを実行すると、以下のような画面が表示されるかと思います。見てわかる通り、検索窓から検索ができますし、表示する件数も変えられます。またある列に沿って昇順・降順といった表示に変更することもできます。
この時点ですでに便利!
DT::renderDataTableの応用編を紹介
さて、前節で基本形を確認しましたので、ここから本題のオプション・拡張機能を紹介していきます。表示する行数を変更する
デフォルトでは、表示する件数は「10・25・50・100」から選ぶことができます。しかし、この件数をデータによっては「5・10・20」などに柔軟に変えたいという場合もあるかと思います。
その場合は、opitionsにlengthMenu とpageLength を指定してあげます。
server.Rの変更箇所
library(shiny) library(DT) shinyServer(function(input, output) { output$table = DT::renderDataTable(iris, options= list(lengthMenu = c(5, 10, 20), pageLength = 5)) })
lengthMenuにて選択できる件数、またpageLenghで最初に表示される件数を指定します。
アプリを更新して、変更されているか確認してみましょう!
テーブルをスクロールできるようにする
一度に表示できる件数は増やしたいけど、画面幅の都合上表示が難しい、という場合はテーブル自体をスクロールできるようにしましょう。先ほどと同様optionsに設定を追加します。
縦方向にスクロールする場合は、scrollCollapse = TRUEとし、表示する幅をscrollY = "200px"のように指定すればOKです。
server.Rの変更箇所
library(shiny) library(DT) shinyServer(function(input, output) { output$table = DT::renderDataTable(iris, options = list(lengthMenu = c(5, 10, 20), pageLength = 5, scrollY = "200px", scrollCollapse = TRUE)) })
表示したい画面幅に応じて、scrollY の値を変えてみましょう。
同じく横方向のスクロールも可能ですので、試してください。
完成イメージ
上のコードを元にShinyアプリを立ち上げてみましょう。テーブルの右側にスクロールバーが出現しています!
ダウンロードボタンを設置
Shiny上で色々操作したテーブルを手元にダウンロードしたい、ということもあるかと思います。そんなときは、ダウンロードボタンを設置しましょう。
拡張機能の一つのBottonsにて設定可能です。
server.Rの変更箇所
library(shiny) library(DT) shinyServer(function(input, output) { output$table = DT::renderDataTable(iris, extensions = c('Buttons'), options = list(lengthMenu = c(5, 10, 20), dom = 'Blfrtip', pageLength = 5, buttons = c('csv', 'excel', 'pdf'))) })
extensionsに'Buttons'を指定し、ボタンが表示されるように同時にdomも指定します。(参考:dom)
buttons にはダウンロード形式を用意します。
他に設定できる形式には、copy(クリップボードにコピー)、print(印刷プレビュー画面に移動)があります。
完成イメージ
上のコードを元にShinyアプリを立ち上げてみましょう。画面上部に、
- CSV
- Excel
ボタンが出現しました。
これらをクリックして、希望のファイルがダウンロードできているか確認してみましょう。
まとめ
今回は、DT::renderDataTableメソッドのオプション・拡張機能を紹介しました。テーブル表示を行う際は是非使い倒して、便利なShinyアプリケーションを作ってみてください!
執筆にあたって、DTについて色々調べてみたのですが、まだまだ多くの拡張ができそうです。
今後も機会があればまとめていこうと思います!