Как извлечь значения динамически генерируемых входов в Shiny? - PullRequest
0 голосов
/ 11 июня 2018

Я создаю блестящее приложение, которое будет генерировать баллы для клиентов на основе их различных функций.В моем блестящем приложении я предоставил checkboxGroupInput для выбора необходимых функций.Основываясь на выбранных функциях, приложение будет динамически добавлять numericInput к веб-интерфейсу, чтобы пользователь мог назначить вес для выбранных объектов, и в дальнейшем веса будут использоваться при расчете оценки.Я пробовал разные способы получить выбранные функции и хотел сохранить их в векторе.Так что я могу использовать элементы вектора для расчета балла.Пожалуйста, кто-нибудь покажет мне решение сохранить выбранные объекты из 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)
})
  })

1 Ответ

0 голосов
/ 11 июня 2018

Вы можете получить значение динамически сгенерированного ввода как

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...