R Shiny-多个具有相同ID的单选按钮/将标题添加到单选按钮组

时间:2018-07-08 15:46:57

标签: r shiny

我要尝试的目标:

在不同的单选按钮组上添加不同的标题。我通过创建两个具有相同ID和不同标签的radioButtons小部件来做到这一点。

问题:

  • 运行脚本时,选择了选项D,并显示了相应的输出。身体健康
  • 当我选择任何其他选项时,将选择它并显示相应的输出。井井有条
  • **当我再次尝试选择选项D时,它被选中,但是对应的输出未显示在主面板中。 *

MWE:

            library(shiny)

            ui <- fluidPage(
            sidebarLayout(
                sidebarPanel(
                width = 3,
                radioButtons("aspect","Structure",
                            choices = list("Option A" = "size",
                                            "Option B" = "coh",
                                            "Option C" = "bound")
                ),
                hr(),
                radioButtons("aspect","Composition",
                            choices = list("Option D" = "div")
                )
                ),
                mainPanel(
                width = 9,
                fluidRow(
                    h3(textOutput("aboutText"))
                )
                )
            )
            )

            server <- function (input, output){
            aspectDesc <- reactive({
                switch(input$aspect,
                    size = "Alpha",
                    coh = " Beta",
                    bound = "Charlie",
                    div = "Delta")
            })
            output$aboutText <- renderText({paste("Text about ", aspectDesc())})


            }

            shinyApp(ui = ui, server = server)

我尝试过的内容

  • 我删除了第二个RadioButtons小部件,并将选项D移到了第一个小部件。工作正常。但是我不能添加不同的标题。
  • 我已经找到了如何将不同的radioButton组合在一起的方法,但找不到实质性内容
  • 我在两个不同的radioButtons上设置了相同的ID(这是我偶然完成的),至少我只能选择一个选项(我想要的方式)。

我完全不知所措。尽管这似乎是一个琐碎的问题。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

经过一番努力,我找到了解决方案。

library(shiny)
library(shinyjs)

ui <- fluidPage(
  useShinyjs(),
  sidebarLayout(
    sidebarPanel(
      width = 3,
      radioButtons("aspect1","Structure",
                   choices = list("Option A" = "size",
                                  "Option B" = "coh",
                                  "Option C" = "bound"),
                   selected = character(0)
      ),
      hr(),
      radioButtons("aspect2","Composition",
                   choices = list("Option D" = "div")
      )
    ),
    mainPanel(
      width = 9,
      fluidRow(
        h3(textOutput("aboutText"))
      )
    )
  )
)

server <- function (input, output, session){

  aspectDesc <- reactiveVal("Delta")

  onclick("aspect1", {
    updateRadioButtons(session, "aspect2", choices = list("Option D" = "div"), 
                       selected = character(0))
    aspectDesc(switch(input$aspect1,
                      size = "Alpha",
                      coh = " Beta",
                      bound = "Charlie"))
  })
  onclick("aspect2",{
      updateRadioButtons(session, "aspect1", 
                         choices = list("Option A" = "size",
                                        "Option B" = "coh",
                                        "Option C" = "bound"), 
                         selected = character(0))
    aspectDesc("Delta")
  })

  output$aboutText <- renderText({paste("Text about ", aspectDesc())})

}

shinyApp(ui = ui, server = server)