Building Reproducible Data Science Assignments

Data science assignments are easier to maintain when the instructor can keep one source document and regenerate student-facing materials after revisions. tutorizeR supports that workflow by converting annotated source documents into tutorials with exercises and solutions.

Suggested assignment structure

assignment-week03/
  lesson-source.qmd
  data/
    student_activity.csv
  generated/
    week03-tutorial.Rmd
    conversion-report.json

Reproducible conversion script

library(tutorizeR)

assignment_dir <- file.path(tempdir(), "assignment-week03")
output_dir <- file.path(assignment_dir, "generated")
source_file <- file.path(assignment_dir, "lesson-source.qmd")

report <- tutorize(
  input = source_file,
  output_dir = output_dir,
  format = "learnr",
  assessment = "both",
  seed = 20260531,
  overwrite = TRUE,
  lint_strict = TRUE
)

write_tutorize_report(
  report = report,
  file = file.path(output_dir, "conversion-report.json"),
  format = "json"
)

Why the seed matters

For teaching workflows, a fixed seed makes generated setup chunks reproducible. This is useful when students, teaching assistants, and instructors need to see the same randomized example or simulated dataset.

LMS manifest

library(tutorizeR)

assignment_dir <- file.path(tempdir(), "assignment-week03")
output_dir <- file.path(assignment_dir, "generated")

manifest <- export_lms_manifest(
  input = file.path(assignment_dir, "lesson-source.qmd"),
  output_file = file.path(output_dir, "lms-manifest.json"),
  profile = "canvas",
  include_solutions = FALSE
)

print(manifest)

The manifest is a local metadata artifact. Direct LMS publication is not part of the current package functionality.