Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何使用选择器输入进行分支处理_R_Shiny - Fatal编程技术网

R 如何使用选择器输入进行分支处理

R 如何使用选择器输入进行分支处理,r,shiny,R,Shiny,我目前正在开发一款闪亮的应用程序。 我想使用多个选择器输入来分支处理流。 具体来说,我想构建下图所示的处理流程 比如说 在PickerInput1中选择选项1时 → PickerInput2显示中产阶级的矢量。 → 将PickerInput2的多选项设置为False,使其成为单个选择。 → 关闭数字输入,以便无法输入数字。 (首先将其变灰或隐藏在UI上) → 按下按钮显示“expression1” 在PickerInput1中选择选项2时 → PickerInput2显示中产阶级的矢量。 →

我目前正在开发一款闪亮的应用程序。 我想使用多个选择器输入来分支处理流。 具体来说,我想构建下图所示的处理流程

比如说 在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,但我可以用该函数更改它吗?) ・ 数字输入可以打开/关闭吗

下面是示例代码

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”)
大班