Как получить входные векторные символы из checkboxGroupInput и преобразовать в числовую оценку

#r #shiny

#r #блестящий

Вопрос:

Я пытаюсь создать блестящее приложение, которое будет вычислять оценку на основе ответов пользователя. Важно, чтобы я фиксировал ввод пользователя с помощью checkboxGroupInput. Я понимаю, что эта функция работает, возвращая вектор символов с выбранными вариантами.

Варианты ввода checkboxGroupInput следующие: «CHF», «Гипертония», «История инсульта / ТИА / тромбоэмболии», «Сосудистое заболевание», «Диабет» Каждый вариант получает оценку после того, как пользователь сделает свой выбор. Я хотел бы вернуть общее значение оценки на основе вариантов. Оценка для каждого варианта следующая «CHF» = 1 «Гипертония» = 1 «История инсульта / ТИА / тромбоэмболии» = 2 «Сосудистое заболевание» = 1 «Диабет» = 1

    checkboxGroupInput(inputId = "PMH", 
                         label = "Past Medical History",
                         choices =  c("CHF", "Hypertension", 
     "Stroke / TIA/Thromboembolism history", "Vascular disease", "Diabetes"))
  

Я ожидаю, что на выходе в shiny будет общая оценка, основанная на выборе, который делает пользователь.
Поэтому я хочу преобразовать входные векторные символы в общую числовую оценку, основанную на том, что выбирает пользователь.
Я думаю, что это сводится к 120 возможным комбинациям
Некоторые примеры следующие:
Если он / она не сделал выбора, общая оценка должна быть равна 0
Если он / она выбрал все варианты, общий балл должен быть 6
если он / она выбрал «CHF» и «История инсульта / ТИА / тромбоэмболии», общий балл должен быть равен 3
если он / она выбрал «CHF» и «История инсульта / ТИА / тромбоэмболии» и «Сосудистое заболевание», оценка равна 4
Выходные данные должны быть реактивными, чтобы, если пользователь изменит свой выбор, автоматически пересчитать оценку

Большое спасибо

Ответ №1:

Вы можете создать именованный вектор с оценками:

 scores <- c(
  "CHF" = 1, 
  "Hypertension" = 1, 
  "Stroke / TIA/Thromboembolism history" = 2, 
  "Vascular disease" = 1, 
  "Diabetes" = 1
)
  

В input$PMH у вас есть вектор, содержащий некоторые заболевания, например:

 x <- c("CHF", "Vascular disease") # example of input$PMH
  

Тогда вы получите общую оценку следующим образом:

 sum(scores[x])