【问题标题】:Having two dynamically selectInput in R shiny在 R 中有两个动态 selectInput 闪亮
【发布时间】:2016-08-12 03:15:56
【问题描述】:

我正在尝试创建一个界面,允许用户选择关注多少列,然后在每列中选择一个唯一值。

我现在的代码不匹配列值和列名。当我只选择 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)  

【问题讨论】:

    标签: r dynamic shiny


    【解决方案1】:

    您创建的滑块输入始终具有相同的 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)  
    

    【讨论】:

    • 有没有办法打印出我在下拉菜单中选择的所有列或属性?文本输出?我不确定如何组合所有选择... output$roles22
    猜你喜欢
    • 2015-05-07
    • 2020-03-20
    • 2016-07-28
    • 1970-01-01
    • 2018-09-21
    • 2018-07-09
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    相关资源
    最近更新 更多