How can we include and grade open-ended question in exams generated by exams2nops
from R/exams?
I recall that we did had such open-ended questions in 2015. These generated a second page to the answer sheet, on which there was lots of space to answer, and on the top an additional line to grade the question with 0 to 4 points.
Is this by now somewhere officially implemented, or can you remind me how it is done?
Overview: Yes, the canonical way to include these would be via string
questions and exams2nops()
allows to include up to three of these. (More than three are still on the wish list but would need more time and thought to be properly supported.) For convenience, any exercise type that is not schoice
or mchoice
is treated the same as a string
question.
Documentation: This has also been officially supported since we implemented it back then but there is no good tutorial for this, yet, just the somewhat technical documentation. ?exams2nops
says:
exams2nops
[...] is originally intended for single- and multiple choice (schoice/mchoice) questions only but has also some limited support for open-ended (string) questions.[...]
Currently, up to three open-ended string questions can also be included. These do not generate boxes on the first exam sheet but instead a second exam sheet is produced for these open-ended questions. It is assumed that a human reader reads these open-ended questions and then assigns points by marking boxes on this separate sheet. Subsequently, this sheet can also be read by
nops_scan
.
Example: As an example, consider the following exam with four question with extypes mchoice
(capitals), string
(essayreg), schoice
(swisscapital), and num
(tstat), respectively.
exams2nops(c("capitals.Rmd", "essayreg.Rmd", "swisscapital.Rmd", "tstat.Rmd"))
The main exam sheet shows that there are four questions but only has checkboxes for items 1 and 3. In contrast, items 2 and 4 are treated as open-ended with answer boxes on the second page.
Practical steps: Compared to the steps for conducting a standard NOPS exam, there are just a few additional steps for the open-ended (string) exercises. In short, you have to collect, fill out, and scan the corresponding sheets, separately. But the evaluation is then done jointly at the end.
nops_scan(...)
as usual on the PDF/PNG files for the regular exam sheets (first page). This yields a file nops_scan_<datetime>.zip
. If necessary, use nops_fix()
to correct problems in this file.nops_scan(..., string = TRUE)
on the PDF/PNG files for the string sheets (second page). This yields a file nops_string_scan_<datetime>.zip
. If necessary, use nops_fix()
to correct problems in this file.nops_eval(...)
almost as usual. By default, it picks up the nops_scan_<datetime>.zip
and nops_string_scan_<datetime>.zip
files in the current working directory. But you can also include the path to these files in arguments scans = ...
and string_scans = ...
, respectively. You can change the argument string_points = ...
if you want the meaning of the checkboxes to differ from their default.