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

如何统计learnr交互式测验的正确答案并程序化重置测验

实现learnr测验的正确答案统计与重置功能

一、统计用户正确答案数量

利用learnr::get_tutorial_state()获取所有问题的答题状态,结合shiny组件实时展示正确答案数量。

二、程序化重置测验

使用learnr::reset_tutorial()函数,配合shiny按钮触发重置操作,清空所有答题记录。

完整修改后的代码

---
title: "Hello, Tutorial!"
output: 
  learnr::tutorial
runtime: shiny_prerendered
---
library(learnr)
library(shiny) # 加载shiny用于交互组件
question(
    "What number is the letter B in the English alphabet?",
    answer("8"),
    answer("14"),
    answer("2", correct = TRUE),
    answer("23")
)
question(
  "What number is the letter A in the English alphabet?",
  answer("8"),
  answer("14"),
  answer("1", correct = TRUE),
  answer("23")
)

添加统计与重置交互组件

# UI部分:展示统计结果和重置按钮
fluidRow(
  column(6,
         h4("正确答案数量:"),
         textOutput("correct_count")
  ),
  column(6,
         actionButton("reset_btn", "重置所有题目", class = "btn-danger")
  )
)

# Server逻辑:实时统计正确答案
observe({
  # 获取所有问题的答题状态
  quiz_state <- get_tutorial_state()
  
  # 统计正确题数:过滤出correct为TRUE的记录
  correct_num <- sum(sapply(quiz_state, function(item) {
    !is.null(item$correct) && item$correct == TRUE
  }))
  
  # 更新显示内容
  output$correct_count <- renderText({
    paste0(correct_num, " / ", length(quiz_state))
  })
})

# 重置按钮触发逻辑
observeEvent(input$reset_btn, {
  reset_tutorial()
})

功能说明

  1. 统计逻辑:

    • get_tutorial_state()返回所有问题的答题状态列表,每个问题的状态包含correct字段(正确为TRUE、错误为FALSE、未答为NULL)
    • 通过遍历列表统计correct == TRUE的数量,实时更新显示正确数/总题数
  2. 重置逻辑:

    • 点击"重置所有题目"按钮后,reset_tutorial()会清空所有问题的答题记录,用户可重新完成所有题目

内容的提问来源于stack exchange,提问作者Enrique Pérez Herrero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 10:00:06