Shiny
のdataTable (DT)は強力なデータテーブルパッケージです。いろいろなオプションがあるので大抵のことはこの
パッケージでできます。さらにカスタマイズをすることでいろいろとマニアックこともできるようになります。
たとえば、セルにスパークラインの棒グラフを埋め込んだり、チェックボックスを追加したり、行を選択してダブルクリックで別のUIを操作したりなど。
ここでは、比較的簡単なカスタマイズである、DTのセルにアイコン(font awesome)を表示する方法を紹介します。
Shiny
でアイコンを取り扱うときの基本はRStudio
純正のicon関数になります。
マニュアルにもあるとおり
submitButton("Update View", icon = icon("refresh"))
のような形でfontawesome
のアイコンを指定するだけで簡単に使えます。
icon
関数ではfont-awesome
以外にもBootstrap Glyphiconも
利用することが可能です。この場合は、icon("plus", lib = "glyphicon")
のように指定します。
またフォントのサイズを変更する場合にはicon("calendar", "fa-3x")
のように指定します。この場合は3倍になります。
テーブルのセルにアイコンを表示する方法
では具体的にテーブルのセルにアイコンを埋め込んで表示する方法を紹介します。
以下の例では、x0
,y0
に乱数を10個、z0
にglyphicon
のplus
アイコンを10個表示、tableOutput
で表示しています。
ポイントは、sanitize.text.function = function(x) x
のところです。これがないと、HTMLがそのままセルに埋め込まれて表示されてしまいますので
おまじないとして入れておけばうまく表示されます。
library(shiny) ui <- fluidPage( tableOutput("dfTable") ) server <- function(input, output) { x0 = rnorm(10) y0 = rnorm(10) z0 = rep(as.character(icon("plus", lib = "glyphicon")), len=10) df = data.frame(x0, y0, z0) # print table output$dfTable = renderTable({ df }, sanitize.text.function = function(x) x) } shinyApp(ui, server)
DTパッケージのテーブルのアイコンを埋め込む方法
強力なDTパッケージでも簡単にアイコンを埋め込むことが可能です。
ポイントはテーブルを作るdatatable
関数をescape=FALSE
としておくことです。
これがないと上記同様、HTMLがそのままセルに埋め込まれて出力されます。
library(shiny) library(DT) ui <- fluidPage( dataTableOutput("dfTable") ) server <- function(input, output) { x0 = rnorm(10) y0 = rnorm(10) z0 = rep(as.character(icon("plus", lib = "glyphicon")), len=10) df = data.frame(x0, y0, z0) output$dfTable = renderDT({ datatable(df, escape = FALSE) }) } shinyApp(ui, server)
このescape=FALSE
はDTテーブルにスパークラインやクリックできるボタンなどチョット変わったものを埋め込んで出力するときにはよく設定する必要が出てきます。
また別のタイミングでご紹介できればと思います。