vignettes/z_code_for_article_in_musik_und_internet.Rmd
z_code_for_article_in_musik_und_internet.Rmd
The following code is taken from the article “psychTestR - Ein R-Paket für (musik-) psychologische Tests und Fragebogeninventare” in “Musik und Internet. Musikalische Phänomene populärer Kulturen” (2022) by Nicolas Ruth & Peter Moormann. Feel free to copy and modify it according to your needs.
install.packages("devtools")
devtools::install_github("pmcharrison/psychTestR")
devtools::install_github("fmhoeger/psyquest")
# Laden der benötigten Pakete
library(psychTestR)
library(psyquest)
library(shiny)
# Codeblöcke
save_time_started <- code_block(function(state, ...) { # Speichern der Startzeit
set_global( # global für diesen Teilnehmer
key = "time_started",
value = Sys.time(),
state = state # interne Statusvariable von psychTestR
)
})
compute_time_taken <- code_block(function(state, ...) { # Berechnung und Ausgabe
time_taken <- Sys.time() - get_global("time_started", state) # der Bearbeitungsdauer
msg <- paste0(
"So lange hast du den Fragebogen bearbeitet: ",
format(time_taken, digits = 3)
)
shiny::showNotification(msg)
})
# Timeline aus Abbildung 1
timeline_abb_1 <- join(
one_button_page( # Willkommensseite
button_text = "Weiter",
div(
p("Willkommen zum", tags$strong("Musikfragebogen!")),
p(tags$em("Wir wollen heute mehr über Musik in deinem Leben erfahren."))
)
),
text_input_page( # erste Frage (Instrument)
label = "Instrument",
prompt = "Welches Instrument spielst du?",
button_text = "Weiter",
on_complete = function(answer, state, ...) {
set_global(
key = "instrument",
value = answer, # answer enthält immer die letzte Antwort
state = state # interne Statusvariable von psychTestR
)
}
),
reactive_page(function(state, answer, ...) { # zweite Frage (Dauer)
msg <- sprintf(
"Wie lange spielst du schon %s?",
get_global("instrument", state) # holt den aktuellen Wert aus state
)
NAFC_page(
label = "time_instrument",
msg,
c(
"Ich habe erst angefangen.",
"ein Monat bis ein halbes Jahr",
"0,5 bis 1 Jahr"
)
)
})
)
# verschiedene Pages zu einer Timeline durch join() bündeln
timeline <- join(
new_timeline( # Timeline für die Startzeit
save_time_started, # Timelines brauchen ein Dictionary, das
dict = psyquest::psyquest_dict # die internationalisierten Sprach-
# bausteine enthält, hier nur ein Dummy.
),
timeline_abb_1, # Timeline aus Abbildung 1
GMS(language = "de"), # Goldsmiths Musical Sophistication Index
compute_time_taken, # Berechnung und Ausgabe Bearbeitungsdauer
elt_save_results_to_disk(complete = TRUE), # Speicherung der Ergebnisse
final_page("Vielen Dank!") # Abschlussseite
)
# fertigen Fragebogen öffnen
questionnaire <- make_test(
timeline,
opt = test_options(
title = "Musikfragebogen",
admin_password = "abc",
languages = "de"
)
)
shiny::runApp(questionnaire)
data <- purrr::map_dfr(
list.files(
"output/results",
pattern = "*.rds",
full.names = TRUE
),
~ as.data.frame(readRDS(.))
)
Of course, real psychTestR experiments tend to be much more complex! See Research examples for some example applications.