Reusable Question Banks

User goal

Question banks help instructors reuse conceptual checks across lessons. This is useful when multiple tutorials should assess the same core ideas without rewriting each MCQ by hand.

Minimal bank

questions:
  - id: visualization-aesthetic
    question: "Which aesthetic maps a variable to the vertical axis?"
    answers:
      - text: "y"
        correct: true
      - text: "x"
        correct: false
    tags: [visualization]
    difficulty: introductory
    language: en

Load and validate

library(tutorizeR)

qb <- load_question_bank("question-bank")
report <- validate_question_bank(qb, strict = FALSE)

print(report)

Reference bank questions in a lesson

The YAML content inside a tutorizeR-mcq-ref block can reference existing bank items:

ids: [visualization-aesthetic]
strategy: ordered
shuffle_answers: false

Realistic installed example

library(tutorizeR)

example_dir <- system.file("examples", "example_course_module", package = "tutorizeR")
qb <- load_question_bank(file.path(example_dir, "question-bank"))

work_dir <- file.path(tempdir(), "tutorizeR-qb-example")
dir.create(work_dir, recursive = TRUE, showWarnings = FALSE)
file.copy(file.path(example_dir, "lesson-source.qmd"), work_dir, overwrite = TRUE)
file.copy(file.path(example_dir, "student_activity.csv"), work_dir, overwrite = TRUE)

report <- tutorize(
  input = file.path(work_dir, "lesson-source.qmd"),
  output_dir = work_dir,
  assessment = "both",
  question_bank = qb,
  mcq_source = "mixed",
  overwrite = TRUE,
  verbose = FALSE
)

print(report)

Limits

Question banks improve reuse, but they do not guarantee good assessment design. Instructors should check that each MCQ is aligned with the learning objective, has plausible distractors, and uses language appropriate for the course.

Reproducibility checklist

library(tutorizeR)

example_dir <- system.file("examples", "example_course_module", package = "tutorizeR")
qb <- load_question_bank(file.path(example_dir, "question-bank"))
validate_question_bank(qb, strict = TRUE)