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:
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).