R 如何使用选择器输入进行分支处理
我目前正在开发一款闪亮的应用程序。 我想使用多个选择器输入来分支处理流。 具体来说,我想构建下图所示的处理流程 比如说 在PickerInput1中选择选项1时 → PickerInput2显示中产阶级的矢量。 → 将PickerInput2的多选项设置为False,使其成为单个选择。 → 关闭数字输入,以便无法输入数字。 (首先将其变灰或隐藏在UI上) → 按下按钮显示“expression1” 在PickerInput1中选择选项2时 → PickerInput2显示中产阶级的矢量。 → 将PickerInput2的多选项设置为False,使其成为单个选择。 → 启用数字输入,以便无法输入数字。 → 按下按钮显示“expression1” 在PickerInput1中选择选项3时 → PickerInput2显示中产阶级和主要阶级的矢量。 → 将PickerInput2的多选项设置为True以选择多个选项。 → 关闭数字输入,以便无法输入数字。 → 按下按钮显示“expression2” 在PickerInput1中选择选项4时 → PickerInput2显示MajorClass向量。 → 将PickerInput2的多选项设置为True以选择多个选项。 → 关闭数字输入,以便无法输入数字。 → 按下按钮显示“expression2” 是否可以以这种方式分支处理流程? 我特别想听 ・ 是否可以更改多个设置? (也许我会使用updatePickerInput,但我可以用该函数更改它吗?) ・ 数字输入可以打开/关闭吗 下面是示例代码R 如何使用选择器输入进行分支处理,r,shiny,R,Shiny,我目前正在开发一款闪亮的应用程序。 我想使用多个选择器输入来分支处理流。 具体来说,我想构建下图所示的处理流程 比如说 在PickerInput1中选择选项1时 → PickerInput2显示中产阶级的矢量。 → 将PickerInput2的多选项设置为False,使其成为单个选择。 → 关闭数字输入,以便无法输入数字。 (首先将其变灰或隐藏在UI上) → 按下按钮显示“expression1” 在PickerInput1中选择选项2时 → PickerInput2显示中产阶级的矢量。 →
library("shiny")
library("shinyWidgets")
major_class <- c("A1","A2","A3")
middle_class <- c("A1_1","A1_2","A2_1","A2_2","A3_1","A3_2")
ui <- fluidPage(
fluidRow(
column(
width = 2, offset = 1,
pickerInput(
inputId = "p1",
label = "PickerInput1",
choices = c("Option1","Option2","Option3","Option4"),
options = list(
`live-Search` = TRUE,
`actions-box` = TRUE,
size = 7,
`selected-text-format` = "count > 3"
),
multiple =FALSE
)
),
column(
width = 2,
pickerInput(
inputId = "p2",
label = "PickerInput2",
choices = "",
options = list(
`live-Search` = TRUE,
`actions-box` = TRUE,
size = 7,
`selected-text-format` = "count > 3"
),
multiple =TRUE
),
numericInput("num", label = "Numeric input", value = 1)
),
column(
width = 2,
actionButton("p3","finish")
),
textOutput("resule_message")
)
)
server <- function(input, output, session) {
observeEvent(input$p1 ,{
if(input$p1 %in% c("Option1","Option2")){
updatePickerInput(session = session, inputId = "p2",
choices = middle_class)
}
if(input$p1 %in% c("Option3")){
updatePickerInput(session = session, inputId = "p2",
choices = list(major = major_class,
middle = middle_class))
}
if(input$p1 %in% c("Option4")){
updatePickerInput(session = session, inputId = "p2",
choices = major_class)
}
})
observeEvent(input$p3 ,{
if(input$p1 %in% c("Option1")){
output$resule_message <- renderText({
paste0("expression1")
})
}
else{
output$resule_message <- renderText({
paste0("expression2")
})
}
})
}
shinyApp(ui = ui, server = server)
库(“闪亮”)
图书馆(“shinyWidgets”)
major_class一种方法是对第二个pickerInput
使用renderUI
,并根据您的条件显示它。试试这个
library("shiny")
library("shinyWidgets")
major_class <- c("A1","A2","A3")
middle_class <- c("A1_1","A1_2","A2_1","A2_2","A3_1","A3_2")
ui <- fluidPage(
fluidRow(
column(
width = 2, offset = 1,
pickerInput(
inputId = "p1",
label = "PickerInput1",
choices = c("Option1","Option2","Option3","Option4"),
options = list(
`live-Search` = TRUE,
`actions-box` = TRUE,
size = 7,
`selected-text-format` = "count > 3"
),
multiple =FALSE
)
),
column(
width = 2, uiOutput("pickr2"), uiOutput("numinput")
),
column(
width = 2,
actionButton("p3","finish")
),
textOutput("resule_message")
)
)
server <- function(input, output, session) {
output$pickr2 <- renderUI({
req(input$p1)
if(input$p1 %in% c("Option1","Option2")){
choices <- middle_class
TORF <- FALSE
}else{
TORF <- TRUE
if(input$p1 %in% c("Option3")){
choices <- c(middle_class,major_class)
}else choices <- major_class
}
pickerInput(
inputId = "p2",
label = "PickerInput2",
choices = choices,
options = list(
`live-Search` = TRUE,
`actions-box` = TRUE,
size = 7,
`selected-text-format` = "count > 3"
),
multiple =TORF
)
})
output$numinput <- renderUI({
req(input$p1)
if(input$p1 %in% c("Option2")){
numericInput("num", label = "Numeric input", value = 1)
}else return(NULL)
})
observeEvent(input$p3 ,{
req(input$p1)
if(input$p1 %in% c("Option1")){
output$resule_message <- renderText({
paste0("expression1")
})
}else{
output$resule_message <- renderText({
paste0("expression2")
})
}
})
}
shinyApp(ui = ui, server = server)
库(“闪亮”)
图书馆(“shinyWidgets”)
大班