3.3 Única escolha com dados gerados
Nas questões com dados gerados, utilizaremos alguma função de amostragem ou aleatorização para geração de dados (pseudo)aleatórios. São estas funções que demonstram todo o potencial de criação do banco de questões dinamicamente.
Uma das opções é criar uma alternativa de única escolha a partir do processo de geração de dados. Abaixo, uma figura exemplificando 4 versões aleatórias do mesmo exercício:
Fonte da figura: O autor
E o código 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) #correct
Sch <- num2schoice(correct = Mean) #to schoice
```
Question
========
Considere a sequência de números abaixo:
`r Mu`
Qual é a média desses valores?
```{r questionlist, echo = FALSE, results = "asis"}
answerlist(Sch$questions, markup = "markdown")
```
Solution
========
A média é igual a `r Mean`
Meta-information
================
exname: media
extype: schoice
exsolution: `r mchoice2string(Sch$solutions)`
download exemplo schoice-dgp.Rmd
Observem que a marcação é essencialmente igual aos itens já vistos anteriormente. Por isso, vamos focar a explicação no código de geração dos números aleatórios.
O arquivo inicia com um trecho de código em R: ```{r dgp, include=FALSE}
A opção include=FALSE
indica que o código em si não será incluído no texto final, mas os objetos gerados podem ser utilizados em operações posteriores.
Em seguida, a função library
carrega alguns pacotes que contem funções úteis.
A opção options(scipen = 999)
previne que os números sejam mostrados em notação científica, o que pode causar alguns erros bizarros.
Até aqui, este trecho inicial pode ser mantido como padrão em todos os exercícios, sem necessidade de mudanças.
Em ## RANDOM DATA
, criamos os objetos aleatórios.
A linha Mu <- 100:999 %>% sample(6)
cria um objeto chamado Mu
que contém 6 valores escolhidos aleatoriamente (sample(6)
) entre 100 e 999 (100:999
). Cada vez que esta linha é executada, ou cada vez que um exercício é criado, os 6 valores escolhidos irão diferir da escolha anterior. Este é o ponto principal da aleatorização.
Em ## SOLUTION
, executamos alguns cálculos para obter a resposta correta.
Mean <- mean(Mu) %>% round(2)
cria um objeto chamado Mean
que armazena média calculada dos 6 valores escolhidos anteriormente (mean(Mu)
) arredondada para a segunda casa decimal (round(2)
).
A próxima linha, Sch <- num2schoice(correct = Mean)
, utiliza a função de conveniência num2schoice
para criar 5 alternativas, sendo uma correta (correct=Mean
) e mais quatro incorretas aleatórias. Obviamente, outros métodos podem ser utilizados para criar as alternativas incorretas.
Após a marcação Question, vejam a linha que contém o código `r Mu`
. Estre trecho “imprime” os valores amazenados no objeto Mu
(são 6 valores escolhidos aleatoriamente).
Em seguida, o trecho de código:
```{r questionlist, echo = FALSE, results = "asis"}
answerlist(Sch$questions, markup = "markdown")
```
utiliza a função de conveniência answerlist
para “impimir” as 5 alternativas criadas anteriormente e armazenadas no objeto Sch
.
Na marcação Solution, usamos novamente `r Mean`
para “imprimir” o valor da média correta calculada.
Por fim, em exsolution
, temos a função de conveniência mchoice2string
para criar a resposta no formato adequado para este campo (binário).