首页 > 解决方案 > 过滤器之间的双向反应性

问题描述

我有一个闪亮的应用程序,我在其中使用更新功能,以便过滤器相互反应。不确定代码中是否存在问题。此处的值未按预期反映(例如,“Rat”为 1,我们无法在另一个过滤器中选择“No”(“New”)有人可以帮我吗?

有没有替代方法?

library(shiny)

data_13_Sam  <- data.frame(
  Ratings = c(1,2,3,4,5,1,2,3,4,5), flag = c("Yes","No","Yes","No","Yes","No","Yes","No","Yes","Yes")
)

ui <- fluidPage(
  column(offset = 0, width = 1,uiOutput("rat")),
  column(offset = 0, width = 2, uiOutput("nt")),
  tableOutput('data')
)

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

  output$rat <- renderUI({
    selectInput("rat1",label = tags$h4("Rat"),choices = unique(data_13_Sam$Ratings))
  })
  
  output$nt <- renderUI({
    selectInput("nt1",label = tags$h4("New"),choices = unique(data_13_Sam$flag))
  })
  
  
  observeEvent(input$rat1,  {
    updateSelectInput(session = session, inputId = "nt1", choices = unique(data_13_Sam$flag[data_13_Sam$Ratings == input$rat1]))
  })
  
  observeEvent(input$nt1,  {
    updateSelectInput(session = session, inputId = "rat1", choices = unique(data_13_Sam$Ratings[data_13_Sam$flag == input$nt1]))
  })
  

  
}

shinyApp(ui, server)

标签: rshiny

解决方案


您的代码适用于shiny::selectInput,并删除 secondupdateSelectInput(...) 请参阅下面的代码。

library(shiny)

data_13_Sam  <- data.frame(
  Ratings = c(1,2,3,4,5,1,2,3,4,5), flag = c("Yes","No","Yes","No","Yes","No","Yes","No","Yes","Yes")
)

ui <- fluidPage(
  column(offset = 0, width = 1,uiOutput("rat")),
  column(offset = 0, width = 2, uiOutput("nt")),
  tableOutput('data')
)

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

  output$rat <- renderUI({
    shiny::selectInput("rat1",label = tags$h4("Rat"),choices = unique(data_13_Sam$Ratings))
  })

  output$nt <- renderUI({
    shiny::selectInput("nt1",label = tags$h4("New"),choices = unique(data_13_Sam$flag))
  })


  observeEvent(input$rat1,  {
    shiny::updateSelectInput(session = session, inputId = "nt1", choices = unique(data_13_Sam$flag[data_13_Sam$Ratings == input$rat1]))
  })

  # observeEvent(input$nt1,  {
  #   shiny::updateSelectInput(session = session, inputId = "rat1", choices = unique(data_13_Sam$Ratings[data_13_Sam$flag == input$nt1]))
  # })
}

shinyApp(ui, server)

推荐阅读