#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])