2016-10-31 12 views
0

EDITE: 私の問題と同じもう1つの例を追加しました。 checkboxGroupInputdatasetとして更新したいと思います。また、checkboxGroupInputオプションのチェックされた列でテーブルをレンダリングしたい。ダイナミックレンダリングUIの入力と出力R shiny

サーバ

shinyServer(function(input, output, session) { 

    dataset_list <- list("rock" = rock,  
          "pressure" = pressure, 
          "cars" = cars 
         ) 

    observeEvent(input$n_select_input, { 

     selected_dataset <- reactive({ 
           selected_list <- list() 
           for(i in 1:input$n_select_input){ 
             selected_list[[i]] <- dataset_list[[i]] 
            } 
           names(selected_list) <- names(dataset_list)[1:input$n_select_input] 
           selected_list 
           }) 


     colname_indata_list <- reactive({ 

           colname.indata.list <- list() 
           for(set in names(selected_dataset())){ 
            colname.indata.list[[set]] <- colnames(selected_dataset()[[set]]) 
            } 
           colname.indata.list 
           }) 


     choice_cand <- reactive({ names(selected_dataset()) }) 


    updateSelectInput(session, 
         "dataset", 
         choices = as.character(choice_cand()) 
        ) 

    choices_cand <- reactive({ colname_indata_list()[[input$dataset]] }) 

    updateCheckboxGroupInput(session, 
           "column", 
           choices = as.character(choices_cand()) 
          ) 

    }) 


# observeEvent(input$dataset, { 
# 
# choices_cand <- reactive({ colname_indata_list()[[input$dataset]] }) 
# updateCheckboxGroupInput(session, "column", 
#        choices = as.character(choices_cand())) 
# 
# }) 

datasetInput <- reactive({ 
    switch(input$dataset, 
     "rock" = rock, 
     "pressure" = pressure, 
     "cars" = cars) 
    }) 

output$table <- renderTable({ 
    datasetInput() 
    }) 


}) 

私はそれが動作しませんでした、##で上記のコードを試してみました。

UI

shinyUI( 
    fluidPage(titlePanel('Downloading Data'), 
      sidebarLayout(
       sidebarPanel(numericInput("n_select_input", "n select inpur", 1, 
              min=1, max=3), 
           selectInput("dataset", "Choose a dataset:", 
             choices = ""), 
          checkboxGroupInput("column", "select column", 
               choices = "") 
          ), 
       mainPanel(
       tableOutput('table') 
       ) 
       ) 
      ) 
) 

最初の書き込み:

Iは、以下のコードを簡略化します。私はupdatedCheckboxGroupInputの選択肢の出力として更新された選択入力を使用したい。しかし、更新された選択入力input$select_groupはヌルです。私は解決策を変更しようとしましたが、解決できませんでした。 あなたはちょうど私がnames(fund_group)変化としてselectInput選択肢を更新したい

fund_group <- reactive({ # this is the list of fund group including fund name 
         # for example, 
         "domestic" = c("a","b", "c"), 
         "global" = c("aa", "bb", "cc") 
         # list name and fund name in the list are changable 
         }) 

..それは動作しません。すぐにこのコードを実行した場合。 は、だから、私は、コード編集した

+0

問題をよりよく説明し、最小限の再現可能な例を投稿できますか?これには機能がありません。 –

+0

@BárbaraBorges私は自分のコードを編集しました、返信いただきありがとうございます! – yeyoung

+0

このコードはまだいくつかの機能が不足しているようです。 – SBista

答えて

0

UIについては

observe({ 
     group_name <- reactive({ names(fund_group()) }) 
     updateSelectInput(session, 
          "select_group", 
          choices = group_name()) 

     fund_list <- reactive({ fund_group()[[input$select_group]] }) 
     updateCheckboxGroupInput(session, 
            "fund_in_group", 
            choices = fund_list(), 
            selected = fund_list()) 
     }) 

narvarPage("narvarTitle", 
tabPanel("tab panel", 

fluidRow(column(3, wellPanel(textOutput("fixed_anal_date"), 
      br(), 
      br(), 
      selectInput("select_group", 
         label = "Select group", 
         choices = ""), 
      br(), 
      checkboxGroupInput("fund_in_group", 
           label = "Select funds :", 
           choices = ""), 
      br() 
)) 
)) 

が汚いコードを読んでいただきありがとうございます...、以下のコードを使用して、今取り組んでいます。 2つの入力を2つの異なる観測に入れてください。

ここにサーバーがあります。 R:

ui <- navbarPage("narvarTitle", 
      tabPanel("tab panel", 

         fluidRow(column(3, wellPanel(textOutput("fixed_anual_date"), 
                 br(), 
                 br(), 
                 selectInput("select_group", 
                    label = "Select group", 
                    choices = ""), 
                 br(), 
                 checkboxGroupInput("fund_in_group", 
                      label = "Select funds :", 
                      choices = ""), 
                 br() 
        )) 
        )) 

) 

[EDIT]:ここで

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

    fund_group <- reactive({ # this is the list of fund group including fund name 
    # for example, 
    list("domestic" = c("a","b", "c"), "global" = c("aa", "bb", "cc")) 
    # list name and fund name in the list are changable 
    }) 

    observe({ 
    group_name <- reactive({ names(fund_group()) }) 
    updateSelectInput(session, 
         "select_group", 
         choices = group_name()) 

    }) 

    observe({ 
    fund_list <- reactive({ fund_group()[[input$select_group]] }) 
    updateCheckboxGroupInput(session, 
           "fund_in_group", 
           choices = fund_list(), 
           selected = fund_list()) 
    }) 

} 

はui.RあるcheckboxGrouptInputのように更新されるように、私は、サーバーのコードを修正した最新のアップデートを1として

datasetが変更され、チェックされた列に対して表がレンダリングされます。

shinyServer(function(input, output, session) { 

    dataset_list <- list("rock" = rock,  
         "pressure" = pressure, 
         "cars" = cars 
) 

    observeEvent(input$n_select_input, { 

    selected_dataset <- reactive({ 
     selected_list <- list() 
     for(i in 1:input$n_select_input){ 
     selected_list[[i]] <- dataset_list[[i]] 
     } 

     names(selected_list) <- names(dataset_list)[1:input$n_select_input] 
     selected_list 
    }) 


    colname_indata_list <- reactive({ 

     colname.indata.list <- list() 
     for(set in names(selected_dataset())){ 
     colname.indata.list[[set]] <- colnames(selected_dataset()[[set]]) 
     } 

     colname.indata.list 
    }) 


    choice_cand <- reactive({ 
     names(selected_dataset()) }) 

    updateSelectInput(session, 
         "dataset", 
         choices = as.character(choice_cand()) 
    ) 

    ######################################Start: Modified############################# 

    observe({ 

     input$dataset ##Added so that this observe is called when the input$dataset changes 
     choices_cand <- reactive({ 

     colname_indata_list()[[input$dataset]] }) 

     updateCheckboxGroupInput(session, 
           "column", 
           choices = as.character(choices_cand()) , 
           selected = as.character(choices_cand()) 
    ) 

    }) 

    }) 

    ######################################End: Modified############################# 


    datasetInput <- reactive({ 
    switch(input$dataset, 
      "rock" = rock, 
      "pressure" = pressure, 
      "cars" = cars) 
    }) 

    output$table <- renderTable({ 
    datasetInput()[,input$column]##only selected columns are displayed 
    }) 


}) 

希望します。

+0

お返事ありがとうございます。私はこれを既に試してみましたが、うまくいきませんでした。( – yeyoung

+0

@김例영私にとってはうまくいくようです!ここにはデモがあります(https://sbista.shinyapps.io/Demo-SO40341423/)。 – SBista

+0

選択したグループの選択肢がリアクティブ値であっても機能しますか? – yeyoung

関連する問題