R闪亮-条件面板不显示所有元素

R闪亮-条件面板不显示所有元素,r,shiny,R,Shiny,我无法理解conditionalPanel()的一些奇怪行为。根据用户输入,应显示部分不同的消息。在任何情况下都应显示一个元素。见示例: ## Only run this example in interactive R sessions if (interactive()) { ui <- fluidPage( sidebarPanel( selectInput("option", "Select option", c("A",

我无法理解
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)
}
##仅在交互式R会话中运行此示例
if(interactive()){

ui为什么不将它们合并到同一个输出中呢

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$test0为什么不将它们合并到同一个输出中呢

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$test0您不能让两个输出共享相同的ID。但是,您可以为两个不同的输出定义相同的
render
函数,您的解决方案是什么。只需为
逐字输出
分配不同的ID,并为两个输出分配一个
render
函数即可

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)

ui您不能让两个输出共享相同的ID。但是,您可以为两个不同的输出定义相同的
render
函数,在您的情况下,解决方案是什么。只需为
逐字输出
分配不同的ID,并为这两个输出分配一个
render
函数即可

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)

ui我认为问题在于您定义了两个具有相同id的
逐字输出
s。可能shiny的默认行为忽略了第二个?我认为问题在于您定义了两个具有相同id的
逐字输出
s。可能shiny的默认行为忽略了第二个?