2016-10-09 12 views
0

私は3つのサブレベル(レベル3)を含む3つのサブレベル(レベル2)を含むグローバルレベル(レベル1)、私のui.Rに3つの異なる地理レベルを持っています。checkboxGroupInputの階層

レベル3の第1レベルはレベル2の第1レベルに含まれ、レベル3の次の3レベルはレベル2の第2レベルに含まれ、 レベル3の最後の3レベルはレベル2の第3レベル。

レベル1チェックボックスをオンにすると、すべてのチェックボックスをオンにするにはどうすればよいですか?レベル3の最初のレベル3を確認したら、レベル2の最初のレベルを自動的にチェックする方法を教えてください。ここで

は、UIコードです:

library(shiny) 

shinyUI(navbarPage("RP 2014", 
    tabPanel("Sélection", 
     print (h4(strong("Geographical levels"))), 
      fluidRow(
       column(width = 3, 
        h5(strong("Level 1")), 
         checkboxInput("dynamic_L1", 
           label = "") 
          ), # f. column 
        column(width = 3, 
         checkboxGroupInput("dynamic_L2", 
           label = h5(strong("Level 2")), 
            choices = list("L2_1" = "Level 2-1", 
                "L2_2" = "Level 2-2", 
                "L2_3" = "Level 2-3")) 
         ), 
        column(width = 3, 
         checkboxGroupInput("dynamic_L3", 
           label = h5(strong("Level 3")), 
            choices = list("L3_1" = "Level 3-1", 
                "L3_2" = "Level 3-2", 
                "L3_3" = "Level 3-3", 
                "L3_4" = "Level 3-4", 
                "L3_5" = "Level 3-5", 
                "L3_6" = "Level 3-6", 
                "L3_7" = "Level 3-7", 
                "L3_8" = "Level 3-8", 
                "L3_9" = "Level 3-9")) 
          ) 
          ) 
        ) 
       )  
) 

私は私の質問を理解願って、私を助けてくれてありがとう。

+0

私は完全な答えを持っていないが、私は 'updateCheckboxGroupInputを含む、あなたが記述状況下で呼ばれるように、' reactive'機能を使用して見を持っていることによって開始したいです'選択された入力を変更する機能。 – rosscova

+0

[shinytree](https://cran.r-project.org/web/packages/shinyTree/README.html)パッケージをチェックしましたか? –

+0

'oberserveEvent'と' updateCheckboxGroupInput'の組み合わせを使用してください –

答えて

1

@warmoverflowが示唆しているように、observeEventupdateCheckboxGroupInputを使用してください。この例からその要点を得るべきです。

コード:

library(shiny) 

l2_choices <- list("L2_1" = "Level 2-1", 
        "L2_2" = "Level 2-2", 
        "L2_3" = "Level 2-3") 

l3_choices <- list("L3_1" = "Level 3-1", 
        "L3_2" = "Level 3-2", 
        "L3_3" = "Level 3-3", 
        "L3_4" = "Level 3-4", 
        "L3_5" = "Level 3-5", 
        "L3_6" = "Level 3-6", 
        "L3_7" = "Level 3-7", 
        "L3_8" = "Level 3-8", 
        "L3_9" = "Level 3-9") 

lvl3_f3 <- l3_choices[1:3] 
lvl2_f1 <- l2_choices[1] 

ui <- shinyUI(navbarPage("RP 2014", 
         tabPanel("Sélection", 
            print (h4(strong("Geographical levels"))), 
            fluidRow(
            column(width = 3, 
              h5(strong("Level 1")), 
              checkboxInput("dynamic_L1", 
                 label = "") 
            ), # f. column 
            column(width = 3, 
              checkboxGroupInput("dynamic_L2", 
                   label = h5(strong("Level 2")), 
                   choices = l2_choices) 
            ), 
            column(width = 3, 
              checkboxGroupInput("dynamic_L3", 
                   label = h5(strong("Level 3")), 
                   choices = l3_choices) 
            ) 
           ) 
         ) 
)  
) 

server <- function(input, output, session){ 
    observeEvent(input$dynamic_L1, { 
    # Get all the checkboxes checked when the Level 1 checkbox is checked 
    if(input$dynamic_L1){ 
     updateCheckboxGroupInput(session, inputId = "dynamic_L2", selected = l2_choices) 
     updateCheckboxGroupInput(session, inputId = "dynamic_L3", selected = l3_choices) 
    } 
    observeEvent(input$dynamic_L3, { 
    # Get the first level of Level 2 checked automatically when the 3 first levels of Level 3 are checked 
    if (all(lvl3_f3 %in% input$dynamic_L3)) { 
     updateCheckboxGroupInput(session, inputId = "dynamic_L2", selected = c(input$dynamic_L2, lvl2_f1)) 
    } 
    }) 
    }) 
} 

shinyApp(ui, server) 
+0

あなたの提案に感謝します:@rosscova、あなたの提案をありがとう、私はそれが良い考えだと思います。 @バーター、あまりにもありがとう、あなたの考えは非常に興味深いですが。残念ながら、shinyTreeの側面はアプリケーションのこの部分と一致しません。私は私のプログラムの別の部分でそれを使用します。 @ warmoverflowとGyD、本当にありがとう、私はあなたの提案が好きですが、私はRに新しいので、それは私のために今すぐチェック/未チェックの条件の下で少し難しいです。だから、私は追加する多くの他のチェックボックスを持っているので、私はconditionalPanelを簡単に使用します。もう一度ありがとうございます。 –