でたぁっ 感動と失敗の備忘録

データ解析を担当することになったサラリーマンの備忘録

shinyIncubatorパッケージで計算中にメッセージ表示

 shinyIncubatorパッケージはShinyで処理中にメッセージを表示することができる。Shinyで処理に時間がかかる場合って不安になるからね。
f:id:deta:20140520054401p:plain
これはShiny - GalleryShiny - Progress exampleで紹介されている。shinyIncubatorパッケージは正式にサポートされてないとのこと。rstudio/shiny-incubator · GitHub


shinyIncubatorパッケージはCRANにない。GitHubからインストールする。

devtools::install_github("shiny-incubator", "rstudio")

プロキシ環境の場合には、前回投稿したこちらの記事のinstall_githubの場合を参考にする。


準備したコードはShiny - Progress exampleのメッセージを日本語に書き換えたもの。

ui.R

library(shinyIncubator)

shinyUI(fluidPage(
  progressInit(),
  h1("Progress demo"),
  sidebarLayout(
    sidebarPanel(
      actionButton("go", "Run")
    ),
    mainPanel(
      plotOutput("plot")
    )
  )
))

server.R

library(shinyIncubator)

shinyServer(function(input, output, session) {
  output$plot <- renderPlot({
    if (input$go == 0)
      return()

    # Wrap the entire expensive operation with withProgress
    withProgress(session, {
      setProgress(message = "計算中。。。ちょっと待ってね", 
        detail = "計算処理に少し時間がかかります。")
      Sys.sleep(2) # 2秒待つ
      setProgress(detail = "メッセージ1")
      Sys.sleep(2) # 2秒待つ
      anotherExpensiveOperation() 
      Sys.sleep(2) # 2秒待つ
      setProgress(detail = "メッセージ2")
      Sys.sleep(2) # 2秒待つ
      plot(rnorm(100), rnorm(100))
    })
  })

  anotherExpensiveOperation <- function() {
    withProgress(session, min = 0, max = 10, {
      setProgress(message = "計算中の詳細")
      for (i in 1:10) {
        setProgress(value = i)
        if (i == 7)
          setProgress(detail = "すみません。ちょっと時間がかかっています。")
        Sys.sleep(0.3)
      }
    })
  }
})