This helper function constructs a timeline where the order of test elements (or blocks of test elements) is determined at run time.

randomise_at_run_time(
  label,
  logic,
  save_order = function(order, state, ...) save_result(state, label, order)
)

Arguments

label

(Character scalar) A label for storing the generated order of test elements.

logic

List where each top-level element corresponds to a randomisation unit. These randomisation units may be either single test elements, lists of test elements, or timelines.

save_order

A function called at run time to save the result of get_order. It should accept three arguments: order, state, and .... order corresponds to the output of get_order, whereas state corresponds to the participant's state object. The default setting saves the generated order in psychTestR's default results repository, under the label label.

Value

A list of test elements or equivalently a timeline that can be combined with other test elements or timelines. These test elements will be presented in a freshly randomised order for each participant.

Note

This function can be nested arbitrarily many times.

Examples

if (FALSE) {
join(
  randomise_at_run_time(
    "main",
    list(
      randomise_at_run_time(
        "1",
        list(one_button_page("1a"),
             one_button_page("1b"),
             one_button_page("1c"))
      ),
      randomise_at_run_time(
        "2",
        list(one_button_page("2a"),
             one_button_page("2b"),
             one_button_page("2c"))
      ),
      randomise_at_run_time(
        "3",
        list(one_button_page("3a"),
             one_button_page("3b"),
             one_button_page("3c"))
      )
    )
  )
) %>% join(final_page("End")) %>% make_test()
}