ふんわり R-tips

ぜんぜんわからない、俺たちは雰囲気でRをやっている

Shinyアプリケーションでブラウザ上に通知を表示

このエントリは、Shiny公式サイトのNotificationの説明を抜粋・翻訳・追記したものです。

Shiny - Notifications

バージョン0.14から、showNotification()関数を用いてShinyでブラウザ上に通知を表示できるようになっています。ShinyのGALLERYに例があります。

この例では、Showボタンが押されるときに注釈を表示するためにobserveEbent()を用いています。

shinyApp(
  ui = fluidPage(
    actionButton("show", "Show")
  ),
  server = function(input, output) {
    observeEvent(input$show, {
      showNotification("This is a notification.")
    })
  }
)

通知はブラウザ端の右下に表示されて、5秒たつと自動的に消えます。

f:id:phmpk:20170113101650p:plain

通知の表示方法を制御するためのオプションもあります。

デフォルトの色はグレーですが、type引数で他の色を指定できます。以下はtype引数を「defalut」「message」「warning」「error」にした場合です。

f:id:phmpk:20170113101831p:plain

通知の右側にデフォルトで閉じるボタンが表示されていますが、closeButton = FALSEで取り除けます。

action引数は、注釈の中のコンテンツを提供する追加の方法です。actionUIコンポーネントがメインテキストのすぐ下に現れます。別れていますが、CSSでカスタマイズできます。

showNotification()関数は、サーバ側から通知を消すためにremoveNotification()に渡すID値を返します。以下の例では、通知を表示するためのボタンと、もう一方の通知を消すためのボタンがあります。

shinyApp(
  ui = fluidPage(
    actionButton("show", "Show"),
    actionButton("remove", "Remove")
  ),
  server = function(input, output) {
    # 注釈ID
    id <- NULL

    observeEvent(input$show, {
      # 注釈が表示されているときに、もう片方を追加しないようにする
      if (!is.null(id))
        return()
      # あとで取り除くためにIDを保存
      id <<- showNotification(paste("Notification message"), duration = 0)
    })

    observeEvent(input$remove, {
      if (!is.null(id))
        removeNotification(id)
      id <<- NULL
    })
  }
)