通过导航到navbarPage中的特定tabPanel触发R Shiny被动

时间:2018-02-23 20:17:46

标签: r shiny reactive

用闪亮的问题写作。我有一个navbarPage,id =“navbar”,在navbarMenu中,用户可以从几个tabPanel中选择一个。每个tabPanel都分配了一个值(值= 1,值= 2等)。因此输入$ navbar是具有所选tabPanel值的反应值。

我定义了一个反应式表达式,它对tabPanel的更改作出反应(根据输入$ navbar做出反应)。我真正想要的是这会导致导航到特定的tabPanel,但不会从该tabPanel导航远离。所以,当输入$ navbar从1变为2时我想要一个反应,但是当从2变为1时没有反应。我怎样才能做到这一点?

以下是我的代码的相关摘要,我认为我不需要完整的可重复示例,但如果我错了,请告诉我。

CLIENT 1-CHUNK 1 ROWS 384 BYTES PARALLEL 1-WAY ROUND ROBIN POINT LOOKUP ON 1 KEY OVER table_one
    PARALLEL LEFT-JOIN TABLE 0
        CLIENT 1-CHUNK PARALLEL 1-WAY ROUND ROBIN FULL SCAN OVER table_two
    PARALLEL LEFT-JOIN TABLE 1(DELAYED EVALUATION)
        CLIENT 1-CHUNK PARALLEL 1-WAY ROUND ROBIN FULL SCAN OVER table_three
            SERVER FILTER BY FIRST KEY ONLY

1 个答案:

答案 0 :(得分:2)

您可以使用if语句。这样可确保代码仅在用户导航到相应的tab时运行。

library(shiny)

shinyApp(
  ui = navbarPage(
    "App Title",
    id = "navbar",
    tabPanel("Plot"),
    navbarMenu(
      "More",
      tabPanel("Summary"),
      "----",
      "Section header",
      tabPanel("Table")
    )
  ),
  server = function(input, output){
    observe({
      if (req(input$navbar) == "Table")
        message("Table has been selected")
      if (req(input$navbar) == "Plot")
        message("Plot has been selected")
    })
  }
)

我建议使用observe而不是reactive来确保一切都在运行,即使被动的所有观察者都处于空闲状态。