我正在尝试将值组合成一个selectInput
,以便传递给另一个函数。所以这是我的代码,用户选择第一个输入,值应为survey = 1
和youth = 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
))
})
使用一个输入传递两个值的更好方法是什么?
答案 0 :(得分:2)
selectizeInput
或pickerInput
(shinyWidgets
包的一部分)将执行我认为您要求的内容。这是一个使用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!)。上面的代码已更新,将选择限制为每组一个,但您需要使用开发版本才能使用。
菜单布局:
值:
答案 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..
我想先输入一个值,然后分配你需要的额外数据。