3.4 Múltipla escolha com dados gerados

Semelhante ao tipo anterior, mas com possibilidade de múltiplas escolhas na resposta. Veja um exemplo na figura abaixo:

Questões do tipo múltipla escolha (*mchoice*) criadas a partir de dados aleatórios. Estão apresentadas 4 versões do mesmo exercício.

Figura 3.4: Questões do tipo múltipla escolha (mchoice) criadas a partir de dados aleatórios. Estão apresentadas 4 versões do mesmo exercício.

Fonte da figura: O autor

E o texto em RMarkdown:

```{r dgp, include = FALSE} 
library(exams)
library(magrittr)
library(knitr)
options(scipen = 999) #prevent scientific notation 

## RANDOM DATA 
Mu <- 100:999 %>% sample(6)

## SOLUTION
Mean <- mean(Mu) %>% round(2)
Max <- max(Mu)
Min <- min(Mu)

## QUESTION/SOLUTION/EXPLANATION GENERATION
questions <- character()
solutions <- logical()
explanations <- character()

while (!any(solutions)) {  #garantir ao menos uma resposta verdadeira

  q <- c(Mean, Max, Min, Mu) %>% sample(3)

  questions[1] <- paste0("A média dos valores é igual a ", q[1])
  solutions[1] <- q[1] == Mean
  explanations[1] <- paste0("A média dos valores é igual a ", Mean)
  
  questions[2] <- paste0("O maior valor é ", q[2])
  solutions[2] <- q[2] == Max
  explanations[2] <- paste0("O maior valor é ", Max)
  
  questions[3] <- paste0("O menor valor é ", q[3])
  solutions[3] <- q[3] == Min
  explanations[3] <- paste0("O menor valor é ", Min)
}

## SORT ORDER
o <- sample(1:3)
questions <- questions[o]
solutions <- solutions[o]
explanations <- explanations[o]
```
Question
========
Considere a sequência de números abaixo:  

`r Mu`

Assinale toda as alternativas verdadeiras:

```{r questionlist, echo = FALSE, results = "asis"}
 answerlist(questions, markup = "markdown")
```

Solution
========
```{r explanations, echo = FALSE, results = "asis"}
 answerlist(ifelse(solutions, "VERDADEIRA", "FALSA"), explanations, markup = "markdown")
```

Meta-information
================
exname: media
extype: mchoice
exsolution: `r mchoice2string(solutions)`

download exemplo mchoice-dgp.Rmd

Este é um código mais complexo, pois criamos várias opções para cada uma das alternativas. Começamos a partir do trecho de código:

## QUESTION/SOLUTION/EXPLANATION GENERATION
questions <- character()
solutions <- logical()
explanations <- character()

onde são criado três objetos em branco: questions, solutions e explanations, que receberão valores mais adiante.

A função while (!any(solutions)) garante que ao menos uma resposta verdadeira seja criada, caso contrário, seria impossível responder corretamente a questão.

O trecho q <- c(Mean, Max, Min, Mu) %>% sample(3) escolhe dentre uma sequência de valores corretos e incorretos quais serão de fato utilizados na questão.

Em seguida:

  • question[1] recebe o texto da alternativa 1.
  • solutions [1] verifica se a alternativa 1 é correta ou não.
  • explanations[1] recebe o texto da explicação 1.

O mesmo padrão se repete para as demais alternativas.

Por último, aleatorizamos a ordem em que as alternativas aparecerão, com o código

## SORT ORDER
o <- sample(1:3)
questions <- questions[o]
solutions <- solutions[o]
explanations <- explanations[o]

A função de conveniência answerlist é utilizada duas vezes (em Question e Solution) para “imprimir” as alternativas e as explicações. E a função mchoice2string é utilizada em exsolution para transformar a solução em formato adequado (binário).