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

Shiny中获取服务端生成的RadioButtons选项及正确答案问题

解决Shiny动态单选按钮无法获取选项的问题

核心思路是在服务器端用响应式变量存储完整题目数据,而不是依赖UI元素去提取选项。因为动态生成的UI组件在服务器端无法直接追踪其选项变化,必须把每次生成的选项和正确答案绑定存储,这样评估时就能直接调用。

具体实现步骤

  • 用reactiveVal存储每次生成的题目信息(选项列表+正确答案)
  • 动态渲染单选按钮时,从响应式变量中读取选项
  • 评估答案时,直接从响应式变量中获取正确答案,无需解析UI组件

示例代码

library(shiny)

ui <- fluidPage(
  actionButton("generate", "生成新题"),
  uiOutput("question_ui"),
  actionButton("evaluate", "评估答案"),
  textOutput("sol1")
)

server <- function(input, output, session) {
  # 存储题目数据:选项列表 + 正确答案
  quiz_data <- reactiveVal(list())
  
  # 生成新题逻辑
  observeEvent(input$generate, {
    # 替换为你的随机试题生成逻辑
    options <- sample(c("选项A", "选项B", "选项C", "选项D"), 4)
    correct_answer <- sample(options, 1)
    # 将完整题目数据存入响应式变量
    quiz_data(list(options = options, correct_answer = correct_answer))
  })
  
  # 动态渲染单选按钮
  output$question_ui <- renderUI({
    req(quiz_data()$options)
    radioButtons("someb", "请选择正确选项", choices = quiz_data()$options)
  })
  
  # 评估答案并显示结果
  output$sol1 <- renderText({
    req(input$evaluate, quiz_data()$correct_answer)
    selected_answer <- input$someb
    correct <- quiz_data()$correct_answer
    
    paste0("正确答案:", correct, "\n你的选择:", ifelse(is.null(selected_answer), "未选择", selected_answer))
  })
}

shinyApp(ui, server)

关键说明

  • 响应式变量quiz_data会在每次点击「生成新题」时更新,始终保存当前题目的完整信息,服务器端随时可以调用
  • 用req()确保依赖项存在时才执行代码,避免空值报错
  • 完全规避了从UI组件提取选项的操作,从根源上解决动态UI无法追踪的问题

内容的提问来源于stack exchange,提问作者Nicolas Molano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:05:24