分析完成后,使标签在闪亮中可见

时间:2016-11-18 05:25:31

标签: r shiny

我有一个闪亮的应用程序,在服务器上执行相对冗长的分析。我想有几个选项卡允许用户查看和下载分析的输出。只有在分析完成后才能看到这些选项卡。

example here隐藏了一个标签,直到一个事件(在这种情况下点击按钮),但我还没有能够弄清楚事件是否完成了分析。

在下面的最小示例中,我已经调整了示例 - 按下按钮后标签仍然可见。

如何使它成为tab2"只有在循环完成后才会显示?

library(shiny)
library(shinyjs)

ui <- tagList(
  useShinyjs(),
  navbarPage(
    "move/view tabs after analysis",
    id = "navbar",
    tabPanel(
      title = "Start",
      actionButton("button", "Run Analysis")
    ),
    tabPanel(
      title = "Analysis output",
      value = "tab2",
      tableOutput("tableOutput")
    )
  )
)

server <- function(input, output, session) {
  observe({
    hide(selector = "#navbar li a[data-value=tab2]")
  })
  observeEvent(input$button, {
    output$tableOutput <- renderTable({

      withProgress(message = 'Working', {
        for(i in 1:5) {
          incProgress(1/5)
          Sys.sleep(2)
        }
      })  
    })
  })
  observeEvent(input$button, {
    toggle(selector = "#navbar li a[data-value=tab2]")
  })
}
shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:1)

以下是诀窍。这首先在外部正确定义表输出,而不是在observe语句中定义,但是在单击按钮之前返回NULL。如果单击该按钮,它将执行长时间运行的计算,之后才会取消隐藏选项卡。

library(shiny)
library(shinyjs)

ui <- tagList(
  useShinyjs(),
  navbarPage(
    "move/view tabs after analysis",
    id = "navbar",
    tabPanel(
      title = "Start",
      actionButton("button", "Run Analysis")
    ),
    tabPanel(
      title = "Analysis output",
      value = "tab2",
      tableOutput("tableOutput")
    )
  )
)

server <- function(input, output, session) {
  observe({
    hide(selector = "#navbar li a[data-value=tab2]")
  })

  output$tableOutput <- renderTable({
    if(input$button > 0){
      withProgress(message = 'Working', {
        for(i in 1:5) {
          incProgress(1/5)
          Sys.sleep(2)
        }
      })
      toggle(selector = "#navbar li a[data-value=tab2]")
    }else{
      NULL
    }
  })
  outputOptions(output,"tableOutput", suspendWhenHidden=F)
}
shinyApp(ui = ui, server = server)