Advanced Programming with R: Midterm

Timeline

Date Milestone
Thursday, October 1 Midterm plan due (see Midterm plan below).
Tuesday, October 6 Instructors return feedback on your plan.
October 6 – 27 Work on your project (no class October 13 and 15, Fall Break).
Tuesday, October 27 In-class hackathon: work on your project with instructor support.
Thursday, October 29 R functions and slides due before class; in-class lightning presentations.

Dates follow the University of Utah Fall 2026 academic calendar; Fall Break runs October 10–18, so no deliverable falls on a university holiday. If you anticipate a conflict, contact both instructors as early as possible.

Task

Develop a small, reusable set of R functions that solves a problem. This could be from your own research, or you may get approval to do a related but modified example from the posted projects. You are not required to build an R package for the midterm. Write your functions as regular R scripts (for example, in an R/ folder) that your report sources. We will cover package development later in the course, and turning your project into a package will be part of the final project.

Getting started: use the template

All midterm projects must start from the course template repository: UofUEpiBio/advanced-programming-midterm.

  1. On the template’s GitHub page, click Use this template → Create a new repository and create the repository under your own account.
  2. Write your report in report.qmd and your presentation in slides.qmd; put data files in data/, and add your R (and C++, if any) code to the repository.
  3. If your project needs additional R packages, add them to the “Install dependencies” step of .github/workflows/check-qmd-render.yaml.
  4. Make sure the GitHub Actions workflow completes without errors, generating report.pdf and slides.html, before you submit.

Midterm plan

By Thursday, October 1, submit a short plan describing your project. The plan should include:

  • A working title.
  • A one-paragraph abstract describing the problem you want to solve and why it matters.
  • The course topics (at least 3; see Requirements) you plan to incorporate.
  • The data (real or simulated) you will use to illustrate your functions.

We will return feedback on Tuesday, October 6. You may be asked to adjust the scope of your project before you start working on it.

Deliverables

  • A GitHub repository, created from the template, containing well-documented R functions, a README.md, and a 2–5-page Quarto report (report.qmd). The report must explain the problem, show how to use the functions, and include an example using real data or a simulation (70% of grade).
  • Oral presentation of no more than 7 minutes using the template’s slides.qmd (30% of grade)

Requirements

Basic requirements include:

  • Implement at least one user-facing R function and organize any supporting code into clearly named helper functions.
  • Document each function’s purpose, inputs, returned value, and any important side effects or assumptions.
  • Make the code reproducible: the repository includes a README.md with setup and usage instructions, and the template’s GitHub Actions workflow renders the report and slides without errors.
  • Use Git and GitHub to track and share the work.
  • Include a brief statement in the README.md or Quarto report describing any use of AI tools, including how you checked their output.

Further, the project should substantively incorporate at least three of the following topics that will have been covered by the midterm deadline:

  • Functional programming, including the *apply family or related functionals
  • R classes and S3 methods (for example, print(), summary(), or plot() methods), where appropriate for the problem
  • data.table
  • Simulation, vectorization, and/or performance timing
  • Debugging and profiling
  • C++ programming and/or Rcpp
  • Parallel computing

Quarto and Git/GitHub are required foundations of the submission rather than choices in this list. Continuous integration is welcome but is not required.

Grading

The grade will be based upon clear communication and coding.