2016-08-10 3 views
0

У меня есть простое приложение, в котором пользователь выбирает имя игрока из (player_name) выпадающего меню selectInput, а затем вы можете выбрать другие фильтры из selectInputs (season) и радиокнопок (contested), который отображает таблицу. Без использования кнопки отправки или действия в любом случае следует заметить, что значение player_name изменилось, что приведет к сбросу значений season и contested в их значения по умолчанию? Обычно я использую условную переменную для ввода изменений, но в этой ситуации player_name имеет тысячи игроков.Shiny R: Сброс других входных значений, когда значение selectInput изменения

ответ

0

Основное решением для этого является использование дополнительного uiOutput «filters_UI» поставить второй selectInput и радиокнопки, а также добавить 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) 

Надеюсь, это может вам помочь.

Смежные вопросы