You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 00:40:10