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

Ven*_*iii 4 r shiny shiny-server

我正在创建一个闪亮的应用程序,它将根据客户的不同功能为客户生成分数。在我闪亮的应用程序中,我提供了 checkboxGroupInput 来选择所需的功能。根据所选功能,应用程序将动态地将 numericInput 添加到 Web ui,以便用户可以为所选功能分配权重,并且权重将用于分数计算。我尝试了不同的方法来获取选定的特征,并希望将它们保存在向量中。这样我就可以使用向量的元素来计算分数。请有人告诉我一个解决方案,将 checkboxGroupInput 中选定的功能保存在向量中,并根据该向量访问动态创建的 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)
})
  })
Run Code Online (Sandbox Code Playgroud)

Flo*_*ian 6

您可以获得动态生成的输入的值,如下所示

input[[paste0(input$selected_var[i],"_weight")]]`
Run Code Online (Sandbox Code Playgroud)

而您只需使用 即可获取带有选定复选框的数组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)
Run Code Online (Sandbox Code Playgroud)