【问题标题】:Shiny R: Reset other input values when selectInput value changesShiny R:当 selectInput 值改变时重置其他输入值
【发布时间】:2016-12-17 11:13:56
【问题描述】:

我有一个简单的应用程序,用户从 selectInput (player_name) 下拉列表中选择玩家的姓名,然后您可以从显示表格的 selectInputs (season) 和 radioButtons (contested) 中选择其他过滤器.在不使用提交或操作按钮的情况下,是否可以观察到player_name 值已更改,然后将seasoncontested 输入重置为其默认值?通常,我会使用条件面板来更改输入,但在这种情况下,player_name 有成千上万的玩家。

【问题讨论】:

    标签: r input shiny


    【解决方案1】:

    对此的基本解决方案是使用额外的uiOutput "filters_UI" 来放置第二个 selectInput 和 radioButtons 并在其中添加 input$player_name,因此每当玩家名称发生变化时,完整的 uiOutput 将使用初始值再次创建。请参阅下面的示例。

    library(shiny)
    
    ui <- fluidPage(
      fluidRow(
        column(6, uiOutput('controls_UI')),
        column(6, DT::dataTableOutput("table_DT"))
      )
    )
    
    server <- shinyServer(function(input, output, session) {
      # to simulate players
      dat <- USJudgeRatings
      players <- row.names(dat)
      seasons <-  names(dat)
    
      output$controls_UI <- renderUI({
        fluidRow(
          column(6, 
            selectInput("player_name", "Players", players, selected = players[1])
          ),
          column(6, 
            uiOutput("filters_UI"))
        )
      })
    
      # render again if input$player_name changes
      output$filters_UI <- renderUI({
        input$player_name
        fluidRow(
          column(6, 
            selectInput("season", "Season", seasons, selected = seasons[1])
          ),
          column(6, 
            radioButtons("contested", label = "Contested",
              choices = list("Choice 1" = 1, "Choice 2" = 2, "Choice 3" = 3), 
              selected = 1)
          )
        )
      })
    
      output$table_DT <- DT::renderDataTable(
        datR(),
        options = list(
          scrollX = TRUE, 
          paging = TRUE,
          lengthMenu = c(10, 20, 50)
        ),
        selection = "single",
        rownames = TRUE
      )
    
      # creates a table based on the sliders and radio buttons
      datR <- reactive({
        input$player_name
        varName <- input$season
        contested <- ifelse(is.null(input$contested),1,as.integer(input$contested))
        dat0 <- data.frame( dat[sample(2:length(players),contested*3), varName] )   
        names(dat0) <- varName
        dat0
      })
    
    })
    
    shinyApp(ui, server)
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2020-05-05
      • 1970-01-01
      • 1970-01-01
      • 2020-08-03
      • 1970-01-01
      • 2021-01-25
      • 1970-01-01
      • 1970-01-01
      • 2020-12-25
      相关资源
      最近更新 更多