如何在learnr教程中动态调整测验题的选项数量?
动态构建learnr多选测验题方案
核心思路
利用do.call()函数将动态生成的参数列表传递给question_checkbox(),实现从CSV等外部数据源加载可变数量选项的需求。
具体实现步骤
准备外部数据结构
假设CSV文件(如quiz_data.csv)包含以下字段:question_text option_text is_correct 选择玛格丽特披萨的所有配料: 马苏里拉奶酪 TRUE 选择玛格丽特披萨的所有配料: 罗勒叶 TRUE 选择玛格丽特披萨的所有配料: 洋葱 FALSE 选择玛格丽特披萨的所有配料: 菠菜 FALSE 读取并转换数据为可用格式
# 读取外部CSV数据 quiz_df <- read.csv("quiz_data.csv", stringsAsFactors = FALSE) # 提取唯一的题目文本 target_question <- unique(quiz_df$question_text)[1] # 批量生成answer对象 answer_items <- lapply(1:nrow(quiz_df), function(i) { answer( text = quiz_df$option_text[i], correct = as.logical(quiz_df$is_correct[i]) ) })动态构建并生成测验题
# 组合所有参数:题目文本 + 批量生成的answer + 配置项 quiz_args <- c( list(target_question), answer_items, list( random_answer_order = TRUE, allow_retry = TRUE, try_again = "请确保选中所有正确配料!" ) ) # 通过do.call将参数列表传入question_checkbox dynamic_checkbox <- do.call(question_checkbox, quiz_args)
关键说明
- 直接传入
answer_items列表会失败,因为question_checkbox()要求每个answer是独立参数而非单个列表,do.call()会自动将列表元素展开为函数的独立参数。 - 若需批量生成多道题目,可循环处理每道题的选项组,重复上述流程即可。
内容的提问来源于stack exchange,提问作者streamline
相关产品推荐
相关产品推荐

