如何在Shiny中获得SelectInput的选择值?

时间:2016-06-29 04:33:07

标签: shiny

如何获取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

2 个答案:

答案 0 :(得分:2)

来自scoping rules of Shiny

  

global.R中定义的对象与服务器函数定义之外的app.R中定义的对象类似,但有一个重要区别:它们对ui对象中的代码也是可见的。这是因为它们被加载到R会话的全局环境中; Shiny应用程序中的所有R代码都在全局环境中运行,或者是它的子代。

但是,这并不意味着app.R中定义的对象不能在UI和服务器端使用,它们只属于不同的环境。

例如:

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)

enter image description here

答案 1 :(得分:0)

我一直在寻找selectinput的选择,但没有重新计算选择。例如,如果数据来自数据库,文件或其他来源。

我没有得到答案。 (我有这个问题,但对我来说不是解决方案)。

这是一个可行的解决方案,它也可以从服务器设置selectinput

  • 在反应功能中设置选择列表
  • 在服务器端构建selectinput(使用选项列表反应功能)
  • 在服务器端设置并获取selectinput

这是代码

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)