如何在 Shiny 中提取动态生成的输入值?

How to extract the values of dynamically generated inputs in Shiny?

我正在创建一个闪亮的应用程序,它将根据客户的不同功能为他们生成分数。在我闪亮的应用程序中,我已将 checkboxGroupInput 提供给 select required 功能。基于 selected 功能,应用程序会动态地将 numericInput 添加到网络 ui,以便用户可以为 selected 功能分配权重,并且权重将进一步用于分数计算。我尝试了不同的方法来获得 selected 特征,并想将它们保存在一个向量中。这样我就可以使用向量的元素来计算分数。请有人告诉我一个解决方案,将 checkboxGroupInput 中的 selected 特征保存在一个向量中,并基于该向量访问动态创建的 numbericInput 值。

代码段

# Select variables to determine the credit worthyness
    checkboxGroupInput(

      inputId = "selected_var",

      label = "Choose variables:",

      choices = c(
        "R" = "r",
        "F" = "f",
        "M" = "m"
        ),

      selected = c("r","f"))
  )

server <- function(input, output) {

  output$weights_input <- renderUI({ 

req(input$selected_var)
req(input$weights)


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)
})
  })

您可以获得动态生成的输入值

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)