2016-04-19 18 views
1

私は、ユーザーがフォーカスを当てる列の数を選択し、各列で一意の値を選択できるインターフェイスを作成しようとしています。Rで2つの動的selectInputを持つ

私は現在、列の値と列の名前が一致しません。それは私が1列だけを選ぶときに機能します。ただし、> 1列の場合は動作しません。 「属性値の選択」は、常に最初の「属性の選択」に優先します。私は彼らに互換性があるようにします。

library(shiny) 


ui<-shinyUI(fluidPage(fluidRow(column(width = 4, 

    numericInput("assets", label = "Choose How Many Attributes to Produce in the Map:", value="1"), 
    uiOutput("variants"), 
    uiOutput("variants2") 

    ) 


))) 

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

    df<-read.csv("diff_block.csv", stringsAsFactors=FALSE, colClasses="character") 
    df$X<-NULL 


    output$variants <- renderUI({ 
    numAssets <- as.integer(input$assets) 
    lapply(1:(numAssets), function(i) { 
      list(selectInput ("choose_columns", 
         "Choose Attribute", 
         sort(unique(names(df)), decreasing = FALSE), 
         selected="")) 

    }) 
    }) 

    output$variants2 <- renderUI({ 
     numAssets <- as.integer(input$assets) 



     lapply(1:(numAssets), function(j) { 

     selectInput ("choose_columns2", 
       "Choose Attribute Value", 
       sort(unique(df[,input$choose_columns]), decreasing = FALSE), 
       selected="") 
     }) 
    }) 
     }) 

shinyApp(ui, server) 

答えて

1

sliderIDはいつも同じid:(selectInput ("choose_columns", ...))で作成していました。そのトリックはpaste0関数を使用して、異なるIDを持つウィジェットを作成し、[[演算子を使用してその値にアクセスすることでした。

library(shiny) 


ui<-shinyUI(fluidPage(fluidRow(column(width = 4, 

             numericInput("assets", label = "Choose How Many Attributes to Produce in the Map:", value="1"), 
             uiOutput("variants"), 
             uiOutput("variants2") 

) 


))) 

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

    #df<-read.csv("diff_block.csv", stringsAsFactors=FALSE, colClasses="character") 
    #df$X<-NULL 
    df <- iris 


    # output$variants <- renderUI({ 
    # numAssets <- as.integer(input$assets) 
    # lapply(1:(numAssets), function(i) { 
    #  list(selectInput ("choose_columns", 
    #      "Choose Attribute", 
    #      sort(unique(names(df)), decreasing = FALSE), 
    #      selected="")) 
    # 
    # }) 
    # }) 

    output$variants <- renderUI({ 
    numAssets <- as.integer(input$assets) 
    lapply(1:(numAssets), function(i) { 
     list(selectInput (paste0("choose_columns", i), 
         "Choose Attribute", 
         sort(unique(names(df)), decreasing = FALSE), 
         selected="")) 

    }) 
    }) 

    output$variants2 <- renderUI({ 
    numAssets <- as.integer(input$assets) 



    # lapply(1:(numAssets), function(j) { 
    #  
    #  selectInput ("choose_columns2", 
    #     "Choose Attribute Value", 
    #     sort(unique(df[,input$choose_columns]), decreasing = FALSE), 
    #     selected="") 
    # }) 
    # }) 

    lapply(1:(numAssets), function(j) { 

     var <- input[[paste0("choose_columns", j)]] 

     selectInput (paste0("choose_attribute", j), 
        paste0("Choose Attribute Value of ", var), 
        sort(unique(df[ ,var]), decreasing = FALSE), 
        selected="") 
    }) 
    }) 
}) 

shinyApp(ui, server) 
+0

ありがとうございました!これは素晴らしいです:) – eagermathperson

+0

私はドロップダウンで選んだすべての列や属性を印刷する方法はありますか? textOutput?すべての選択肢を組み合わせる方法がわかりません... 出力$ roles22 < - renderUI({ numAssets < - as.integer(入力$ assets) xx <-data.frame() for(1 in: (numAssets)){ X = data.frame(入力[[paste0( "choose_columns"、J)]]) XX <-rbind.fill(XX、X) }タグリスト( ヘルプテキスト(paste0(XX) )) })#end of renderUIわからない... – eagermathperson

関連する問題