如何在R Shiny中根据对错状态改变RadioButton选项颜色?
解决方案
以下是实现需求的完整修改代码,同时完善了答案说明功能:
library(shiny) ui <- fluidPage( mainPanel( h4("What would happen if you ran 6- in the console? Make a guess!"), # 动态生成单选按钮以支持样式变化 uiOutput("question1_ui"), actionButton("answer_button_1", "Show Answer"), verbatimTextOutput("n_answer_text_1") ) ) server <- function(input, output) { # 定义正确选项标识 correct_option <- "opt1" # 动态渲染单选按钮,根据选中状态切换文本颜色 output$question1_ui <- renderUI({ selected_val <- input$question1 # 为每个选项生成对应样式的文本 styled_choices <- lapply(c("opt1", "opt2", "opt3", "opt4"), function(opt) { if (!is.null(selected_val)) { if (opt == correct_option && selected_val == opt) { # 正确选项选中时显示绿色 HTML('<span style="color: green;">+ sign</span>') } else if (opt != correct_option && selected_val == opt) { # 错误选项选中时显示红色 HTML(paste0('<span style="color: red;">', switch(opt, "opt2" = "6", "opt3" = "-6", "opt4" = "6-"), '</span>')) } else { # 未选中时保持默认样式 switch(opt, "opt1" = "+ sign", "opt2" = "6", "opt3" = "-6", "opt4" = "6-") } } else { # 初始未选中状态的文本 switch(opt, "opt1" = "+ sign", "opt2" = "6", "opt3" = "-6", "opt4" = "6-") } }) radioButtons("question1", label = NULL, choiceNames = styled_choices, choiceValues = c("opt1", "opt2", "opt3", "opt4"), width = 500, selected = input$question1) # 保留用户已选中的状态 }) # 点击按钮后显示详细答案说明 n_ans_text_1 <- eventReactive(input$answer_button_1, { "正确答案是'+ sign'。当在R控制台输入6-后,R会判定你尚未完成完整的表达式(缺少第二个操作数),因此会显示+提示符,等待你继续输入后续内容。" }) output$n_answer_text_1 <- renderText({n_ans_text_1()}) } # Run the application shinyApp(ui = ui, server = server)
关键修改说明
- 动态UI渲染:使用
uiOutput配合renderUI实现单选按钮的样式实时更新,这是实现选中后颜色变化的核心。 - 选项值区分:将
choiceValues设置为唯一标识(opt1至opt4),方便判断用户选中的具体选项。 - 颜色逻辑:针对正确/错误选项的选中状态,分别应用绿色/红色文本样式,未选中选项保持默认样式。
- 答案补充:完善了答案说明,补充了R语言背后的运行逻辑,帮助新员工理解知识点。
内容的提问来源于stack exchange,提问作者Mickiii
相关产品推荐
相关产品推荐

