Вы можете получить значение динамически сгенерированного ввода как
input[[ paste0(input$selected_var[i],"_weight")]]`
, в то время как вы можете получить массив с выбранными флажками просто с помощью input$selected_var
.
Ниже приведен рабочий пример, надеюсь, это поможет!
library(shiny)
ui <- fluidPage(
checkboxGroupInput(
inputId = "selected_var",
label = "Choose variables:",
choices = c(
"R" = "r",
"F" = "f",
"M" = "m"
),
selected = c("r","f")
),
uiOutput('weights_input'),
textOutput('score')
)
server <- function(input, output) {
output$weights_input <- renderUI({
req(input$selected_var)
lapply(1:length(input$selected_var), function(i) {
numericInput(inputId = paste0(input$selected_var[i],"_weight"), label = input$selected_var[i], min = 0, max = 1, value = 0)
})
})
output$score <- renderText({
req(input$selected_var)
selected = input$selected_var
values = sapply(1:length(input$selected_var), function(i) {
req(input[[ paste0(input$selected_var[i],"_weight")]]);input[[ paste0(input$selected_var[i],"_weight")]]
})
values = setNames(values,selected)
paste0('Input: [', paste(names(values), values, sep = ":", collapse = ", "), ']. The sum of the values is ', sum(values))
})
}
shinyApp(ui,server)