SLE疾病评分系统Shiny应用运行故障排查求助
SLE疾病评分Shiny应用问题修复
代码错误点
- Shiny的
input属于只读响应式对象,禁止直接对input$xxx赋值 checkboxGroupInput的选中结果统一存储在input$variable字符向量中,不会生成input$neu、input$gin这类独立变量- 输出对象
output$data需要绑定renderText()渲染函数,不可直接绑定reactive() - 逻辑判断语法错误:
total > 2 && < 5不符合R语法规范,需补全为total > 2 && total < 5 - 存在逻辑冗余:
mio、fev被重复累加,mio分值被重复赋值覆盖,还遗漏了muc(皮肤黏膜病变)的分值定义 - 缺失shiny包加载语句,未加载包直接运行会报错
修复后完整可运行代码
library(shiny) ui <- fluidPage( checkboxGroupInput("variable", "请选择存在的症状:", c("神经系统病变" = "neu", "肾脏病变" = "gin", "血管炎" = "vas", "溶血/血小板减少" = "hem", "肌炎" = "mio", "关节炎" = "art", "皮肤黏膜病变" = "muc", "浆膜炎" = "ser", "发热/乏力" = "fev", "白细胞减少/淋巴细胞减少" = "leu" )), h3("疾病活动度判定结果:"), textOutput("data") ) server <- function(input, output, session) { # 定义症状-分值映射表 score_map <- c( "neu" = 8, "gin" = 6, "vas" = 4, "hem" = 3, "mio" = 3, "art" = 2, "muc" = 2, "ser" = 2, "fev" = 1, "leu" = 1 ) output$data <- renderText({ # 计算选中症状总分 total <- sum(score_map[input$variable]) # 按区间判定活动度 if (total <= 2) { "轻度疾病活动" } else if (total > 2 && total < 5) { "中度疾病活动" } else { "重度疾病活动" } }) } shinyApp(ui, server)
功能说明
代码已将所有症状名称汉化,选中对应症状后会自动累加分值,实时返回疾病活动度判定结果。如果未选中任何症状,总分0会判定为轻度疾病活动。
内容的提问来源于stack exchange,提问作者Dite Bayu
相关产品推荐
相关产品推荐

