Create a single quiz question. Used in conjunction with create_quiz() to generate a quiz.
Usage
create_question(
prompt,
...,
type = c("auto", "single", "multiple"),
input = c("auto", "select", "checkbox", "radio"),
shuffle = FALSE,
ns = shiny::NS("quiz")
)
create_question_raw(
prompt,
grader,
correct_answer_pretty,
user_answer_prettifier = function(user_input) paste0(user_input, collapse = ", ")
)Arguments
- prompt
Text of the question prompt. Can also be an HTML element such as
htmltools::div().- ...
Objects of class 'quizChoice' generated from
add_choice(),add_numeric(),add_slider(), oradd_text(). Named options toshiny::selectInput()orshiny::checkboxGroupInput()can be passed as well.- type
One of c('auto', 'single', 'multiple'). Can the user select only one answer or multiple?
- input
One of c('auto', 'select', 'checkbox'). Should the UI for a select input (
shiny::selectInput()), checkbox (shiny::checkboxGroupInput()), or radio buttons (shiny::radioButtons())?- shuffle
TRUE or FALSE. If TRUE order of choices will be randomly shuffled.
- ns
Namespace function generated from
shiny::NS()- grader
A function that takes the user answer and determines if it is correct. Must take one argument and return TRUE or FALSE. Note that this is wrapped with
purrr::possibly()andbase::isTRUE()to catch any errors.- correct_answer_pretty
A string representing the correct answer that is printed 'pretty'
- user_answer_prettifier
A function with one argument that takes the user's answers and prints it 'pretty'
Details
create_question is the default method of creating quiz questions.
create_question_raw() allows any HTML in the prompt. This must contain a shiny input that is accessible via input$answers. The namespace also needs care. The default inputId is shiny::NS('quiz')('answers').
Functions
create_question(): Create a quiz questioncreate_question_raw(): Create a quiz question using custom inputs. This is a more flexible function that allows any html.
See also
add_choice(), add_slider(), add_numeric(), add_text(), create_question_raw()
Examples
q <- create_question(
prompt = 'My prompt explaining what the ATE of this thing should be',
add_choice("34"),
add_choice("59", TRUE),
add_choice("98", TRUE)
)
q2 <- create_question(
prompt = 'My prompt explaining what the ATC of this thing should be',
add_slider(0, 30, 15, correct = 10)
)
quiz <- create_quiz(q, q2)
q3 <- create_question_raw(
prompt = htmltools::div(
htmltools::p("my question"),
shiny::selectInput(
inputId = shiny::NS('quiz')('answers'),
label = 'Select 5',
choices = c(4, 5, 6)
)
),
grader = \(user_input) user_input == '5',
correct_answer_pretty = '5'
)
quiz2 <- create_quiz(q3, q2)