1

我希望能够根据在单选按钮输入中所做的选择来更新 pickerInput 中可用的选择。在下面的示例中,我希望单选按钮“A”给出 mtcars$cyl 的 pickerInput 列表,而选择器输入“B”给出 mtcars$mpg 的选择器输入

我曾尝试使用 if 语句来执行此操作,但到目前为止我还没有得到任何结果。下面的可重现示例:

   library(shiny)
library(leaflet)
library(shinyjs)
library(rgeos)
library(tidyverse)
library(openxlsx)
library(plotly)
library(shinyWidgets)
library(rgdal)




ui <- fluidPage(shinyjs::useShinyjs(), 

fluidRow(column(
6,radioButtons("type", "Type:",
c("A" = "norm",
"B" = "unif")))),

fluidRow(column(
3,
pickerInput("regInput","Region",choices=unique(mtcars$cyl), 
  options = list(`actions-box` = TRUE),multiple = T,
selected = unique(mtcars$cyl)))))


server <- function (input, output, session) {


observeEvent(input$type,{
  a_option <- input$regInput
  if (a_option == "B") {
updatePickerInput(session = session,inputId = "regInput",
choices  =unique(mtcars$mpg))}})


}

shinyApp(ui = ui, server = server)
4

2 回答 2

0

服务器必须侦听正确的 UI 元素(相关单选按钮的 ID = "type")。目前它观察到一个未定义的元素“dist”。

尝试改变

observeEvent(input$dist, { code })

observeEvent(input$type, { code })
于 2022-02-26T11:59:54.550 回答
0

正如在另一个答案中所说,您需要input$type根据其中的值观察和更新选择器输入。此外,包含 else 语句也很重要,这样当用户在单选按钮选项之间进行多次选择时,能够更新选择器输入。最后,updatePickerInput您需要包含选定的参数以保持行为在 ui 上的样子。

这是执行我上面描述的代码:

library(shiny)
library(shinyjs)
library(tidyverse)
library(shinyWidgets)

ui <- fluidPage(shinyjs::useShinyjs(), 
                
                fluidRow(
                  column(
                    6,
                    radioButtons("type",
                                 "Type:",
                                 c("A" = "norm",
                                   "B" = "unif"))
                  )),
                
                fluidRow(
                  column(
                    3,
                    pickerInput("regInput","Region",
                                choices=unique(mtcars$cyl), 
                                options = list(`actions-box` = TRUE),
                                multiple = T,
                                selected = unique(mtcars$cyl))
                  ))
)


server <- function (input, output, session) {
  
  observeEvent(input$type,{
    if (input$type == "unif") {
      updatePickerInput(session = session,inputId = "regInput",
                        choices = unique(mtcars$mpg),
                        selected = unique(mtcars$mpg))
    } else {
      updatePickerInput(session = session,inputId = "regInput",
                        choices = unique(mtcars$cyl),
                        selected = unique(mtcars$cyl))
    }
  })
  
  
}

shinyApp(ui = ui, server = server)
于 2022-02-26T12:13:01.073 回答