如何统计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() })
功能说明
统计逻辑:
get_tutorial_state()返回所有问题的答题状态列表,每个问题的状态包含correct字段(正确为TRUE、错误为FALSE、未答为NULL)- 通过遍历列表统计
correct == TRUE的数量,实时更新显示正确数/总题数
重置逻辑:
- 点击"重置所有题目"按钮后,
reset_tutorial()会清空所有问题的答题记录,用户可重新完成所有题目
- 点击"重置所有题目"按钮后,
内容的提问来源于stack exchange,提问作者Enrique Pérez Herrero
相关产品推荐
相关产品推荐

