R/exams d2l multiple choice question doesn't select correct answer

360 views Asked by At

I use the following to create a D2L exam from the "capital.Rmd" example (I converted the question to schoice)

exams2blackboard("capitals.Rmd", n =3, name = "testquiz" )

After I upload the testquiz.zip file, I notice that the correct answer must be manually chosen on the D2L platform.

I was wondering if there is a workaround.

Many Thanks,

Umut

2

There are 2 answers

5
BrightSpace user On BEST ANSWER

If you want the correct solution to be selected, do not use the Import option from the Question Library or from the Quiz itself. Use the Import/Export/Copy Components under the Course Admin tab.

If you import the questions through the following steps, BrightSpace correctly picks the right solution. It’s a bit longer but seems to correctly choose the solution.

Under the Course Admin tab of your course, go to

  • 'Import/Export/Copy Components' -> ‘Import Components’ -> Start -> (drag and drop the ZIP file)

    Choose Import

  • Click ‘Advanced Options…’

    Drop file, then click on Advanced Options...

    This step will take a few minutes for large files; if you do not click Advanced Options, then the import will automatically import the questions into the 'Question Library' and will generate a Quiz with the imported questions; you do not want this.

    This step will take a few minutes for large ZIPs

  • -> Continue -> Continue -> at this point choose 'Question Library' from the section 'Select Components to Import'

    Do not choose 'Quizzes' because it auto-creates a quiz with ALL questions

    I would not choose ‘Quizzes’ because it automatically creates a quiz and makes it available to students. It has the unfortunate side-effect of making ALL the questions available, which means all the versions of various dynamic questions; this is not something we want.

  • -> Continue -> Continue. This stage takes a few minutes for large imports.

    Correct option selected (note that plots have not imported though; still trying to figure out why)

Now the Questions are available in the Question Library and can be used to generate new quizzes. Each question has the correct answer selected already. This works for ‘schoice’ and ‘mchoice’ versions of questions. Currently, plots are not imported, though, still trying to figure out why.

1
Achim Zeileis On

This problem is new to me. In earlier versions of Brightspace/D2L the import of single-choice and multiple-choice exercises via exams2blackboard() worked well. Possibly, D2L changed in the meantime given that neither the current release version from CRAN nor the development version from R-Forge work for you.

D2L also supports other import formats and we did play around with some of these. See the following discussions in the R/exams forum on R-Forge:

Notably we tried to use the XML-based QTI 2.1 format that seems to be employed by D2L internally. However, D2L apparently uses a particular custom flavor of QTI 2.1. It should be possible to reverse engineer that and improve exams2qti21() correspondingly but so far (to the best of my knowledge) no one put the time and effort into this that would be needed.

For simple single/multiple choice questions a CSV-based exchange format can also be used. I have put together a very basic exams2d2l() function that was posted in the threads above and that I'm also including below. It can set up the CSV file for a single exercise like the capitals.Rmd exercise that you use above. For plain text exercises like that it seems to work well but not for more complex elements (graphics, code, math, etc.).

exams2d2l <- function(file, dir = ".", ## n = 1L, nsamp = NULL disabled for now
  name = NULL, quiet = TRUE, edir = NULL, tdir = NULL, sdir = NULL, verbose = FALSE,
  resolution = 100, width = 4, height = 4, svg = FALSE,
  encoding = "", converter = NULL, ...)
{
  ## for Rnw exercises use "ttm" converter otherwise "pandoc" converter
  if(any(tolower(tools::file_ext(unlist(file))) == "rmd")) {
    if(is.null(converter)) converter <- "pandoc"
  } else {
    if(is.null(converter)) converter <- "ttm"
  }

  ## output directory or display on the fly
  ## output name processing 
  if(is.null(name)) name <- tools::file_path_sans_ext(basename(file))
  
  ## set up .html transformer and writer function
  htmltransform <- make_exercise_transform_html(converter = converter, ...)

  ## create exam with HTML text
  rval <- xexams(file,
    driver = list(sweave = list(quiet = quiet, pdf = FALSE, png = !svg, svg = svg,
      resolution = resolution, width = width, height = height, encoding = encoding),
      read = NULL, transform = htmltransform, write = NULL),
    dir = dir, edir = edir, tdir = tdir, sdir = sdir, verbose = verbose)

  ## currently: only a single exercise
  rval <- rval[[1L]][[1L]]

  ## put together CSV
  cleanup <- function(x) gsub('"', '""', paste(x, collapse = "\n"), fixed = TRUE)
  rval <- c(
    'NewQuestion,MC,,,',
    sprintf('ID,"%s",,,', cleanup(rval$metainfo$file)),
    sprintf('Title,"%s",,,', cleanup(rval$metainfo$name)),
    sprintf('QuestionText,"%s",,,', cleanup(rval$question)),
    sprintf('Points,%s,,,', if(is.null(rval$metainfo$points)) 1 else rval$metainfo$points),
    'Difficulty,1,,,',
    'Image,,,,',
    paste0('Option,', ifelse(rval$metainfo$solution, 100, 0), ',"', cleanup(rval$questionlist), '",,"', cleanup(rval$solutionlist), '"'),
    'Hint,,,,',
    sprintf('Feedback,"%s",,,', cleanup(rval$solution))
  )
  writeLines(rval, file.path(dir, paste0(name, ".csv")))
  invisible(rval)
}