Skip to contents

This function creates various types of survey questions for use in a Surveydown survey.

Usage

sd_question(
  type,
  id,
  label,
  cols = "80",
  direction = "horizontal",
  status = "default",
  width = "100%",
  height = NULL,
  selected = NULL,
  label_select = "Choose an option...",
  grid = TRUE,
  individual = TRUE,
  justified = FALSE,
  force_edges = TRUE,
  option = NULL,
  placeholder = NULL,
  resize = NULL,
  row = NULL,
  default = NULL,
  ...
)

Arguments

type

Specifies the type of question. Possible values are "select", "mc", "mc_multiple", "mc_buttons", "mc_multiple_buttons", "text", "textarea", "numeric", "slider", "slider_numeric", "date", "daterange", and "matrix".

id

A unique identifier for the question, which will be used as the variable name in the resulting survey data.

label

Character string. The label for the UI element, which can be formatted with markdown.

cols

Integer. Number of columns for the "textarea" question type. Defaults to 80.

direction

Character string. The direction for button groups ("horizontal" or "vertical"). Defaults to "horizontal".

status

Character string. The status for button groups. Defaults to "default".

width

Character string. The width of the UI element. Defaults to "100%".

height

Character string. The height of the input for the "textarea" question type. Defaults to "100px".

selected

Value. The selected value(s) for certain input elements.

label_select

Character string. The label for the select input. Defaults to "Choose an option...".

grid

Logical. Whether to show a grid for slider input. Defaults to TRUE.

individual

Logical. Whether buttons in a group should be individually styled. Defaults to TRUE.

justified

Logical. Whether buttons in a group should fill the width of the parent div. Defaults to FALSE.

force_edges

Logical. Whether to force edges for slider input. Defaults to TRUE.

option

Named vector for the "select", "radio", "checkbox", and "slider" question types, or numeric vector for "slider_numeric" question type.

placeholder

Character string. Placeholder text for "text" and "textarea" question types.

resize

Character string. Resize option for textarea input. Defaults to NULL.

row

List. Used for "matrix" type questions. Contains the row labels and their corresponding IDs.

default

Numeric, length 1 (for a single sided slider), or 2 for a two sided (range based) slider. Values to be used as the starting default for the slider. Defaults to the median of values.

...

Additional arguments, often specific to different input types. Examples include pre, sep, step, and animate for "slider" and "slider_numeric" question types, etc.

Value

A 'shiny' UI element wrapped in a div with a data attribute for question ID.

Details

The function supports various question types:

  • "select": A dropdown selection

  • "mc": Multiple choice (single selection)

  • "mc_multiple": Multiple choice (multiple selections allowed)

  • "mc_buttons": Multiple choice with button-style options (single selection)

  • "mc_multiple_buttons": Multiple choice with button-style options (multiple selections allowed)

  • "text": Single-line text question

  • "textarea": Multi-line text question

  • "numeric": Numeric question

  • "slider": Slider question

  • "slider_numeric": Extended numeric slider question

  • "date": Date question

  • "daterange": Date range question

  • "matrix": Matrix-style question with rows and columns

For "matrix" type questions, use the row parameter to define the rows of the matrix. Each element in the row list should have a name (used as the row ID) and a value (used as the row label).

Examples

if (interactive()) {
  library(surveydown)

  # Get path to example survey file
  survey_path <- system.file("examples", "basic_survey.qmd",
                             package = "surveydown")

  # Copy to a temporary directory
  temp_dir <- tempdir()
  file.copy(survey_path, file.path(temp_dir, "survey.qmd"))
  orig_dir <- getwd()
  setwd(temp_dir)

  # Define a minimal server
  server <- function(input, output, session) {
    sd_server()
  }

  # Run the app
  shiny::shinyApp(ui = sd_ui(), server = server)

  # Clean up
  setwd(orig_dir)
}