【问题标题】:R shiny - conditionalPanel does not show all elementsR闪亮 - 条件面板不显示所有元素
【发布时间】:2018-02-14 22:24:17
【问题描述】:

我无法理解 conditionalPanel() 的一些奇怪行为。根据用户输入,应显示部分不同的消息。在任何情况下都应显示一个元素。见例子:

## Only run this example in interactive R sessions
if (interactive()) {
  ui <- fluidPage(
    sidebarPanel(
      selectInput("option", "Select option",
                  c("A", "B", "C"),
                  selected = "B"
      )
    ),
    mainPanel(
      uiOutput("test0"),
      uiOutput("test1")
    )
  )

  server <- function(input, output) {
    output$msg <- renderText("Some text") 

    output$test0 <- renderUI({
      conditionalPanel(
        condition = "input.option == 'B' || input.option == 'C'",
        verbatimTextOutput("msg"),
        wellPanel(h4("Are you sure you don't want to select A?")))
      })

    output$test1 <- renderUI({
      conditionalPanel(
        condition = "input.option == 'A'",
        verbatimTextOutput("msg"),
        wellPanel(h4("Good choice!")))
    })
  }

  shinyApp(ui, server)
}

这个迷你示例中的明显解决方案是将verbatimTextOutput() 移到conditionalPanel() 之外,但是我想知道是否有其他方法可以解决这个问题。

【问题讨论】:

  • 我认为问题在于您定义了两个具有相同 ID 的 verbatimTextOutputs。也许闪亮的默认行为会忽略第二个?

标签: r shiny


【解决方案1】:

您不能让两个输出共享同一个 ID。但是,您可以为两个不同的输出定义相同的 render 函数,您的解决方案是什么。只需为您的 verbatimTextOutputs 和一个 render 函数分配不同的 ID。

ui <- fluidPage(
    sidebarPanel(
      selectInput("option", "Select option",
                  c("A", "B", "C"),
                  selected = "B"
      )
    ),
    mainPanel(
      uiOutput("test0"),
      uiOutput("test1")
    )
  )

  server <- function(input, output) {
    output$msg1 <- output$msg2 <- renderText("Some text") 

    output$test0 <- renderUI({
      conditionalPanel(
        condition = "input.option == 'B' || input.option == 'C'",
        verbatimTextOutput("msg1"),
        wellPanel(h4("Are you sure you don't want to select A?")))
      })

    output$test1 <- renderUI({
      conditionalPanel(
        condition = "input.option == 'A'",
        verbatimTextOutput("msg2"),
        wellPanel(h4("Good choice!")))
    })
  }

  shinyApp(ui, server)

【讨论】:

    【解决方案2】:

    你为什么不把它们组合成同一个输出

    output$test0 <- renderUI({
      list(
        verbatimTextOutput("msg"), 
        conditionalPanel(
          condition = "input.option == 'B' || input.option == 'C'",
          wellPanel(h4("Are you sure you don't want to select A?"))), 
        conditionalPanel(
          condition = "input.option == 'A'",
          wellPanel(h4("Good choice!")))
      )
    })
    

    不需要output$test1。那么就只有一个verbatimTextOutput("msg")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-10
      • 2014-06-16
      • 1970-01-01
      • 2014-03-03
      • 2017-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多