How to get choices values of SelectInput in Shiny?

北城以北 提交于 2021-02-05 00:28:28

问题


How can I get the list of choices in a SelectInpute?

ui.R

selectInput(inputId = "select_gender", 
    label = "Gender",
    choices = c("Male","Female"),
    width = 150
)

server.R

# Something like...

genders <- input$select_gender["choices"]

# So that the gender would be:

> genders

[1] Male Female

回答1:


From the scoping rules of Shiny:

Objects defined in global.R are similar to those defined in app.R outside of the server function definition, with one important difference: they are also visible to the code in the ui object. This is because they are loaded into the global environment of the R session; all R code in a Shiny app is run in the global environment or a child of it.

However, this doesn't mean that objects defined in the app.R can't be used on both the UI and Server side, they just belong to a different environment.

For example:

library("shiny")
library("pryr")

# or in global.R
genders <- c("Male", "Female")
gen_env <- where("genders")
par_env <- parent.env(gen_env)

ui <- fluidPage(
  selectInput("shiny_gender", "Select Gender", choices = genders),
  verbatimTextOutput("selected_gender_index"),
  p("The `genders` object belongs to the environment:"),
  verbatimTextOutput("gen_env_print"),
  p("Which is the child of the environment:"),
  verbatimTextOutput("par_env_print")
)

server <- function(input, output) {
   output$selected_gender_index <- renderPrint({
     # use the 'genders' vector on the server side as well
     which(genders %in% input$shiny_gender)
   })

   output$gen_env_print <- renderPrint(gen_env)
   output$par_env_print <- renderPrint(par_env)
}

shinyApp(ui = ui, server = server)




回答2:


I've looked for get choices of selectinput but without recompute the choices. For example if the datas come from database, or file or other source.

And I didn't get answer. (I get this question but not the solution for me).

Here is ma solution which also could set the selectinput from the server:

  • set the choices list in a reactive function
  • build the selectinput in the server side (with the choices list reactive function)
  • set and get the selectinput in the server side

Here is the code

options(encoding = "UTF-8") 

library("shiny")
library("pryr")
ui <- fluidPage(
  uiOutput("shiny_gender.UI"),
  verbatimTextOutput("selected_gender_index"),
  p("The `genders` object belongs to the environment:"),
  verbatimTextOutput("gen_env_print"),
  p("Which is the child of the environment:"),
  verbatimTextOutput("par_env_print"),
  p(""),
  textInput("set_input_txt","Set the car in letter (for example `Datsun 710`)",
            #" Set the Select Input Male / Female ",
            ""),
  actionButton("submit","submit")
)


server <- function(input, output, session) {
  observeEvent(
    c(input$submit),
    {

      if (input$submit>0) {
        updateSelectInput(session, "shiny_gender",
                          #   server = TRUE,  if updateSelectizeInput
                          choices =shiny_gender.list(),
                          selected = input$set_input_txt
        )
      }  
    }
  )

  shiny_gender.list <- reactive  ({
    #c("Male", "Female")
    rownames(mtcars)
  })  


  output$shiny_gender.UI <- renderUI({
    selectInput( "shiny_gender",
                 label="Select car",#"Select Gender",
                 choices =shiny_gender.list()
    )
  })  


  output$selected_gender_index <- renderPrint({

    which(shiny_gender.list() %in% input$shiny_gender)
  })


  output$gen_env_print <- renderPrint(where("shiny_gender.list"))
  output$par_env_print <- renderPrint(parent.env( where("shiny_gender.list")))

}

shinyApp(ui = ui, server = server)


来源:https://stackoverflow.com/questions/38090443/how-to-get-choices-values-of-selectinput-in-shiny

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!