为selectInput R Shiny中的每个选定选项传递多个值

时间:2018-05-22 19:08:41

标签: r shiny

我正在尝试将值组合成一个selectInput,以便传递给另一个函数。所以这是我的代码,用户选择第一个输入,值应为survey = 1youth = FALSE

library(shiny)

output$choose_wave <- renderUI({
  selectInput("selected_wave", "Wave", choices = list(
    "Wave 1- Adult" = wave = 1, youth = FALSE,
    "Wave 1- Youth" = wave = 1, youth = TRUE,
    "Wave 2- Adult" = wave = 2, youth = FALSE,
    "Wave 2- Youth" = wave = 2, youth = TRUE
  ))
})

使用一个输入传递两个值的更好方法是什么?

2 个答案:

答案 0 :(得分:2)

selectizeInputpickerInputshinyWidgets包的一部分)将执行我认为您要求的内容。这是一个使用pickerInput的示例,您可以将这两种因素分成几组,并允许多个选择最终分组到输出中。这是一个最小的例子。

devtools::install_github("dreamRs/shinyWidgets")
library(shiny)
library(shinyWidgets)
ui <- fluidPage(
  uiOutput("choose_wave"),
  h5("Value from selected wave:"),
  verbatimTextOutput("select_values")
)

server <- function(input,output) {
  output$choose_wave <- renderUI({
  pickerInput("selected_wave", "Select one from each group below:", 
          choices = list(Wave = c("Wave 1" = 1, "Wave 2" = 2), Youth = c("Adult"=FALSE, "Youth"=TRUE)),
                         multiple = T, options = list('max-options-group' = 1))
  })
  output$select_values <- renderText({as.character(input$selected_wave)})
}

shinyApp(ui, server)

<强>更新 shinyWidgets的开发版现在允许限制每组的选择数量(感谢Victor!)。上面的代码已更新,将选择限制为每组一个,但您需要使用开发版本才能使用。

菜单布局:

enter image description here

值:

enter image description here

答案 1 :(得分:0)

你能使用if / else吗?可能会更笨重,但它的工作原理。此输入也有效,我通常会为文本输入分配一个值。

if(input$wave==1 #or whatever the input is actually equal too){
wave = 1
youth = FALSE
}else if(input$wave==2){
wave = 1
youth = TRUE
} and so on..

我想先输入一个值,然后分配你需要的额外数据。