I am very new to R and to R/exams. I've finally figured out basic things like compiling a simple exam with exams2pdf and exams2canvas, and I've figured out how to arrange exercises such that this group of X exercises gets randomized in the exam and others don't.
In my normal written exams, sometimes I have a group of exercises that require some introductory text (e.g,. a brief case study on which the next few questions are based, or a specific set of instructions for the questions that follow).
How do I create this chunk of text using R/exams and Rmd files?
I can't figure out if it's a matter of creating a particular Rmd file and then simply adding that to the list when creating the exam (like a dummy file of sorts that only shows text, but isn't numbered), or if I have to do something with the particular tex template I'm using.
There's a post on R-forge about embedding a plain LaTeX file between exercises that seems to get at what I'm asking, but I'm using Rmd files to create exercises, not Rnw files, and so, frankly, I just don't understand it.
Thank you for any help.
There are two strategies for this:
Always use the same sequence of exercises, say, ex1.Rmd
, ex2.Rmd
, ex3.Rmd
where ex1.Rmd
creates and describes the setting and ex2.Rmd
and ex3.Rmd
simply re-use the variables created internally by ex1.Rmd
. In the exams2xyz()
interface you have to assure that all exercises are processed in the same environment, e.g., the global environment:
exams2pdf(c("ex1.Rmd", "ex2.Rmd", "ex3.Rmd"), envir = .GlobalEnv)
For .Rnw exercises this is not necessary because they are always processed in the global environment anyway.
Instead of separate exercise files, combine all exercises in a single "cloze" exercise ex123.Rmd
that combines three sub-items. For a simple exercise with two sub-items, see: http://www.R-exams.org/templates/lm/
For exams2pdf()
both strategies work and it is more a matter of taste whether one prefers all exercises together in a single file or split across separate files. However, for other exams2xyz()
interfaces only one or none of these strategies work:
exams2pdf()
: 1 + 2exams2html()
: 1 + 2exams2nops()
: 1exams2moodle()
: 2exams2openolat()
: 1 + 2exams2blackboard()
: -exams2canvas()
: 2Basically, strategy 1 is only guaranteed to work for interfaces that generate separate files for separate exams like exams2pdf()
, exams2nops()
, etc. However, for interfaces that create pools of exercises for learning management systems like exams2moodle()
, exams2canvas()
, etc. it typically often cannot be assured that the same random replication is drawn for all three exercises. (Thus, if there are two random replications per exercise, A and B, participants might not get A/A/A or B/B/B but A/B/A.)
Hence, if ex1/2/3 are multiple-choice exercises that you want to print and scan automatically, then you could use exams2nops()
in combination with strategy 1. However, strategy 2 would not work because cloze exercises cannot be scanned automatically in exams2nops()
.
In contrast, if you want to use Moodle, then exams2moodle()
could be combined with strategy 2. In contrast, strategy 1 would not work (see above).
As you are interested in Canvas export: In Canvas neither of the two strategies works. It doesn't support cloze exercises. And to the best of my knowledge it is not straightforward to assure that exercises are sampled "in sync".
Update: Meanwhile support in various interfaces improved. Strategy 1 is now also possible in exams2openolat()
and exams2canvas()
supports at least some flavors of cloze exercises.