R Shiny: использовать один и тот же checkBoxGroup дважды

В приведенном ниже коде показан пользовательский интерфейс с двумя вкладками, каждая из которых содержит одну и ту же панель флажков. Я хотел бы, чтобы одна панель обновлялась, если другая обновляется, и наоборот. На сервере используется функция наблюдения, но по какой-то причине она только обновляет checkBoxGroup на вкладке 2, если изменяется вкладка 1, но не наоборот. У кого-нибудь есть идеи, как это решить?

   library(shiny)

    ui <- shinyUI(
      navbarPage("tabs",           
                 tabPanel("tab1", 
                          fluidPage(
                            sidebarPanel(
                              checkboxGroupInput("variable", "variable:",list("1" = "1","2" = "2","3" = "3","4" = "4","5" = "5"), selected = list("1"="1"))
                            )
                          )),
                 tabPanel("tab2", 
                          fluidPage( 
                            sidebarPanel(
                              checkboxGroupInput("variable", "variable:",list("1" = "1","2" = "2","3" = "3","4" = "4","5" = "5"), selected = list("1"="1"))
                            )
                          )
                 )
      )
    )

    server <- function(input, output, session) {
      observe({
        updateCheckboxGroupInput("variable","variable:",list("1" = "1","2" = "2","3" = "3","4" = "4","5" = "5"),selected=input$variable)
      })

    }

    shinyApp(ui = ui, server = server)

person WhoKnows19    schedule 04.08.2016    source источник


Ответы (1)


У вас не должно быть двух виджетов с одним и тем же id. Вместо этого просто назовите их, скажем, variable1 и variable2 и создайте два разных наблюдателя, которые будут обновлять флажки.

    library(shiny)

ui <- shinyUI(
  navbarPage("tabs",           
             tabPanel("tab1", 
                      fluidPage(
                        sidebarPanel(
                          checkboxGroupInput("variable1", "variable:",
                                             list("1" = "1","2" = "2","3" = "3","4" = "4","5" = "5"), 
                                             selected = list("1"="1"))
                        )
                      )),
             tabPanel("tab2", 
                      fluidPage( 
                        sidebarPanel(
                          checkboxGroupInput("variable2", "variable:",
                                             list("1" = "1","2" = "2","3" = "3","4" = "4","5" = "5"), 
                                             selected = list("1"="1"))
                        )
                      )
             )
  )
)

server <- function(input, output, session) {
  observe({
    # added 'session'
    updateCheckboxGroupInput(session, "variable1", 
                             choices = list("1" = "1","2" = "2","3" = "3","4" = "4","5" = "5"),
                             selected = input$variable2)
  })

  observe({
    updateCheckboxGroupInput(session, "variable2", 
                             choices = list("1" = "1","2" = "2","3" = "3","4" = "4","5" = "5"),
                             selected = input$variable1)
  })

}

shinyApp(ui = ui, server = server)
person Michal Majka    schedule 04.08.2016
comment
Спасибо Безымянный Пользователь! - person WhoKnows19; 04.08.2016
comment
Можем ли мы сделать то же самое для других виджетов? - person rahul yadav; 17.07.2018