2016-08-04 2 views
1

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

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) 

ответ

2

Вы не должны иметь два виджета с одинаковым 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) 
+1

Thanks WithoutUser! – WhoKnows19

Смежные вопросы