唯一值不适用于R shiny selectInput

时间:2016-04-20 15:40:31

标签: r shiny unique

我希望从数据集中选择多个列,然后在所选列中再选择一个UNIQUE值。现在这个独特的功能似乎不起作用。它复制了列选择中具有最独特值的值。

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

    uiOutput("variants"),
    uiOutput("variants2")
    )
)))

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

  df<-somedata


  output$variants <- renderUI({
      selectInput ("choose_columns", 
                        "Choose Attribute", 
                        sort(unique(names(df)), decreasing = FALSE),
                        selected="",
                        multiple =TRUE)

  })


  dat<-reactive({
     unique(df[,input$choose_columns])
    })



  output$variants2 <- renderUI({
    selectInput ('further', 
                  'Choose Attribute(s) Value(s)', 
                  dat(), 
                  selected="", 
                  multiple = TRUE)
    })  



})

shinyApp(ui, server) 

2 个答案:

答案 0 :(得分:0)

您的代码似乎对我有用。我使用mtcars数据集作为示例。我唯一的建议是在df<-somedata代码之外(之前)server。这样,每次用户修改输入时都不会重新加载数据。以下是我的mtcars代码:

ui<-shinyUI(
  fluidPage(
    fluidRow(
      column(width = 4, 
        uiOutput("variants"),
        uiOutput("variants2")
      )
    )
  )
)

library(datasets)
data("mtcars")

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

  output$variants <- renderUI({
    selectInput ("choose_columns", 
      "Choose Attribute", 
      sort(unique(names(mtcars)), decreasing = FALSE),
      selected="",
      multiple =TRUE)
    })

  dat<-reactive({
    unique(mtcars[,input$choose_columns])
  })

  output$variants2 <- renderUI({
    selectInput('further', 
      'Choose Attribute(s) Value(s)', 
      dat(), 
      selected="", 
      multiple = TRUE)
    })  
})

shinyApp(ui, server) 

答案 1 :(得分:0)

尝试打印dat(),您会看到每个列中的值可能重复,但整个行都不会等于另一行。 selectInput只是按列破坏dat()。在selectInput按列获取唯一值的一种方法是使用:

dat<-reactive({
  lapply(mtcars[,input$choose_columns], unique)
})