私の ui.RI には、uiOutput と、クリックで自由に selectInput を追加できるボタンがあります。これらの selectInput の可能な選択肢は同じであるため、2 つの selectInput がある場合、一方の更新が他方の選択肢に影響します。私が抱えている問題は、selectInputの更新後にselectInputの選択肢を更新できないことです。これがコードです。
Ui.Rで
div(id="inference_species_group_div",
box(h5(strong(uiInferenceSpeciesGroup)), width = "100%",
fluidRow(
column(width = 6, id = "inference_species_group_inputs_col",
uiOutput("inf_par_sp_group_output_1")
)
),
br(),
fluidRow(
column(width = 12, id = "inference_species_group_add_input_col",
actionButton("inference_species_group_add_input_btn", uiInferenceSpeciesGroupAdd, icon = icon("plus"))
)
)
)
)
server.R で
observeEvent(input$inference_species_group_add_input_btn, {
addInfParSpGroupAdd()
})
addInfParSpGroupAdd <- function(){
InfParSpGpInd <<- InfParSpGpInd + 1
output[[paste0("inf_par_sp_group_output_", InfParSpGpInd)]] <- renderUI({
list(
fluidRow(
column(width=8,
selectInput(paste0("inf_par_sp_group_select_", InfParSpGpInd),
label=paste0(uiInferenceSpeciesGroupInputLabel, ""),
multiple=T, choices = InfParSpGpListSp, selected = NULL
)
),
column(width=1, id=paste0("inf_par_sp_group_rmv_col_", InfParSpGpInd),
actionButton(paste0("inf_par_sp_group_rmv_btn_", InfParSpGpInd), "", icon = icon("times"),
onclick = paste0("Shiny.onInputChange('removeGroupSpecies', ", InfParSpGpInd, ")")
)
),
tags$style(type='text/css', paste0("#inf_par_sp_group_rmv_col_", InfParSpGpInd, " {padding-top:4%}"))
),
uiOutput(paste0("inf_par_sp_group_output_", (InfParSpGpInd + 1)))
)
})
observeEvent(input[[paste0("inf_par_sp_group_select_", InfParSpGpInd)]], {
selectedInInput = input[[paste0("inf_par_sp_group_select_", InfParSpGpInd)]]
InfParSpGpListSp <<- InfParSpGpListSp [! InfParSpGpListSp %in% selectedInInput]
rebindGroupSpeciesInputs()
})
}
observeEvent(input$removeGroupSpecies, {
i = input$removeGroupSpecies
selectedInInput = input[[paste0("inf_par_sp_group_select_", i)]]
output[[paste0("inf_par_sp_group_output_", i)]] <- renderUI({
uiOutput(paste0("inf_par_sp_group_output_", (i + 1)))
})
if (!is.null(selectedInInput) && length(selectedInInput) > 0){
InfParSpGpListSp <<- c(InfParSpGpListSp, selectedInInput)
rebindGroupSpeciesInputs()
}
})
rebindGroupSpeciesInputs <- function(){
for (i in 1:InfParSpGpInd){
if (!is.null(input[[paste0("inf_par_sp_group_select_", i)]])){
updateSelectInput(session, input[[paste0("inf_par_sp_group_select_", i)]], choices = InfParSpGpListSp)
}
}
}
この行では、
updateSelectInput(session, input[[paste0("inf_par_sp_group_select_", i)]], choices = InfParSpGpListSp)
の値はInfParSpGpListSp
本来あるべきものですが、selectInput/selectizeInput は選択肢のリストを更新しません。