coatless-rpkg / assignr

Tools for Educators Writing Assignments in RMarkdown
https://r-pkg.thecoatlessprofessor.com/assignr/
42 stars 7 forks source link
homework r r-package rmarkdown rstats teaching teaching-tool

assignr

R build status Package-License

Tools for creating homework assignments and solutions using RMarkdown.

Motivation

Writing homework assignments for students in the age of RMarkdown necessitates the creation of two separate documents -- assign.Rmd and soln.Rmd. The goal of assignr is to create one document main.Rmd that can be broken apart into the above two documents. Thus, there is no longer a need to copy and paste between the assign and the soln documents as all of the contents are together in one file.

Example workflow with `assignr`

Installation

assignr is only available via GitHub.

To install the package from GitHub, you can type:

install.packages("devtools")

devtools::install_github("coatless-rpkg/assignr")

Usage

To use assignr, create an Rmd file named WXYZ-main.Rmd, where WXYZ could be hw00. Within the file, add to your code chunks one of the following chunk options:

  1. solution = TRUE
    • to mark a solution
  2. directions = TRUE
    • to indicate directions

When specifying text directions that should not appear in the solution file, use the latter chunk option, and set the code chunk engine to asis, e.g.

```{asis name, directions = TRUE}
The goal of the following exercise is... 

Then, in _R_, run: 

```r
# Render output
assignr("hw00-main.Rmd")

Example Output:

hw00
├── hw00-assign
│   ├── hw00-assign.Rmd
│   ├── hw00-assign.html
│   ├── hw00-assign.pdf
│   └── hw00-assign.zip
└── hw00-soln
    ├── hw00-soln.Rmd
    ├── hw00-soln.html
    ├── hw00-soln.pdf
    └── hw00-soln.zip

Previews of what is contained in each file are shown next.

Instructor Main

In the main file, denoted as *-main.Rmd, all content -- including solutions -- should be placed. As an example of contents, please see the hw00-main.Rmd document that ships with the package.

library("assignr")

file.show(get_example_filepath("hw00-main.Rmd"))
---
title: 'Homework X'
author: "Prof. Name"
date: 'Due: Friday, Month Day by 1:59 PM CDT'
output:
  html_document:
    theme: readable
    toc: yes
---

# Exercise 1 (Introductory `R`)

```{asis, directions = TRUE}
For this exercise, we will create a couple different vectors.

(a) Create two vectors x0 and x1. Each should have a length of 25 and store the following:

**Solution:**
x0 = rep(10, 25)
x1 = (1:25) ^ 3

### Student Assignment

Within this section, the assignment rmarkdown file given to students is displayed.

title: 'Homework X' author: "Prof. Name" date: 'Due: Friday, Month Day by 1:59 PM CDT' output: html_document: theme: readable toc: yes

Exercise 1 (Introductory R)

For this exercise, we will create a couple different vectors.

(a) Create two vectors x0 and x1. Each should have a length of 25 and store the following:

PDF Rendering of `hw00-assign.Rmd`

Solutions

Lastly, we have the assignment rmarkdown file that contains the solutions and their respective output.

---
title: 'Homework X'
author: "Prof. Name"
date: 'Due: Friday, Month Day by 1:59 PM CDT'
output:
  html_document:
    theme: readable
    toc: yes
---

# Exercise 1 (Introductory `R`)

**(a)** Create two vectors `x0` and `x1`. Each should have a
length of 25 and store the following:

- `x0`: Each element should be the value `10`.
- `x1`: The first 25 cubed numbers, starting from `1.` (e.g. `1`, `8`, `27`, et cetera)

**Solution:**

```{r, solution = TRUE}
x0 = rep(10, 25)
x1 = (1:25) ^ 3


![PDF Rendering of `hw00-soln.Rmd`](tools/readme/assignr-soln-pdf.png)

## Authors

James Joseph Balamuta and David Dalpiaz

## License

GPL (>= 2)