The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
library(formr)
# So this vignette can run offline, the API calls below are replayed from
# pre-recorded responses (vcr "cassettes" shipped with the package). With a
# real server you would simply call formr_api_authenticate() with your own
# host and credentials instead of this block.
.formr_vcr <- requireNamespace("vcr", quietly = TRUE) &&
nzchar(system.file("extdata/vcr_cassettes", package = "formr"))
if (.formr_vcr) {
vcr::vcr_configure(
dir = system.file("extdata/vcr_cassettes", package = "formr"),
filter_sensitive_data = list(
"formr-client-id-redacted" = "dummy_client_id",
"formr-client-secret-redacted" = "dummy_client_secret",
"formr-host-redacted" = "api.localhost"
)
)
vcr::use_cassette("formr_api_authenticate", {
formr_api_authenticate(host = "http://api.localhost",
client_id = "dummy_client_id", client_secret = "dummy_client_secret",
verbose = FALSE)
})
}The new formr API (V1) provides a streamlined pipeline
for importing data. The API strictly separates fetching
(getting data from the server) from wrangling
(processing types, reversals, and scales), but the package provides a
powerful convenience wrapper, formr_api_results(), to
handle the entire process in one step.
Before fetching data, ensure you are authenticated. If you have stored your keys (see Getting Started), this is automatic.
formr_api_results)The primary function is formr_api_results(). By default,
it performs a “Smart Fetch” that downloads every survey in the run,
recognises data types, reverses items ending in R,
aggregates scales, and joins everything into one wide tibble (one row
per session).
# Replayed from a recorded response for a run called "test-run":
vcr::use_cassette("formr_api_results_fetch_single", {
df <- formr_api_results("test-run", verbose = FALSE)
})
class(df) # a "formr_results" tibble, ready for analysis
#> [1] "formr_results" "tbl_df" "tbl" "data.frame"formr_api_results do by default?R (e.g.,
neuro_3R) based on item choices.You can toggle these behaviors using arguments if you want raw data or need to handle processing manually:
# Get processed data, but strictly separated by survey (no join)
list_of_dfs <- formr_api_results("daily_diary", join = FALSE)
# Get raw data (types recognized, but NO reversing or scoring)
raw_data <- formr_api_results("daily_diary", compute_scales = FALSE)If you set compute_scales = FALSE, or you are debugging
why a scale isn’t calculating, you can call the lower-level processing
functions yourself. They take the raw results plus the survey’s item
table (metadata).
To show this running offline, we use a small example dataset bundled
with the package instead of a live download. On a real server you would
get results from
formr_api_results(..., compute_scales = FALSE) and
item_list from
formr_api_survey_structure().
# Raw results: one row per session, items not yet reversed or scored.
results <- jsonlite::fromJSON(
system.file("extdata/gods_example_results.json", package = "formr"))
# Item metadata: a table with (at least) a `name` and a `choices` column —
# exactly what formr_api_survey_structure() returns from the server.
items_raw <- jsonlite::fromJSON(
system.file("extdata/gods_example_items.json", package = "formr"),
simplifyVector = FALSE)
item_list <- data.frame(
name = vapply(items_raw$items, function(it) it$name, character(1)),
stringsAsFactors = FALSE)
item_list$choices <- lapply(items_raw$items, function(it) it$choices)
head(results[, c("session", "religiousness_2R", "religiousness_3")])
#> session religiousness_2R religiousness_3
#> 1 1 3 2
#> 2 2 5 1
#> 3 3 5 1
#> 4 4 4 3
#> 5 5 3 2
#> 6 6 3 4formr_api_reverse)This function automatically reverses items whose name ends in
R (e.g. religiousness_2R). It uses each item’s
defined choices to compute the reversal: \(New
= (Max + Min) - Old\).
df_reversed <- formr_api_reverse(results = results, item_list = item_list)
# religiousness_2R is reverse-keyed — its values are now flipped:
data.frame(before = results$religiousness_2R,
after = df_reversed$religiousness_2R)
#> before after
#> 1 3 2
#> 2 5 0
#> 3 5 0
#> 4 4 1
#> 5 3 2
#> 6 3 2
#> 7 2 3
#> 8 5 0
#> 9 4 1
#> 10 3 2
#> 11 5 0
#> 12 1 4
#> 13 2 3
#> 14 1 4formr_api_aggregate)This function computes mean scores for items sharing a common stem.
Items religiousness_1, religiousness_2R,
religiousness_3, … share the stem
religiousness, so it creates a new
religiousness column with the row mean.
df_scored <- formr_api_aggregate(results = df_reversed, item_list = item_list,
min_items = 1)
# New scale columns appear alongside the raw items:
head(df_scored[, c("session", "religiousness", "prefer")])
#> session religiousness prefer
#> 1 1 2.75 4.0
#> 2 2 0.75 1.0
#> 3 3 0.75 1.0
#> 4 4 2.25 4.0
#> 5 5 2.25 3.0
#> 6 6 2.75 3.5By default at least 2 items are required to form a scale; override
with min_items as above.
A complete analysis script. formr_api_results()
collapses fetching, reversing, and scoring into one call.
Ensure your variable names follow the stem_number or
stem_numberR convention (e.g., neuro_1,
neuro_2R). formr_api_aggregate() (and thus
formr_api_results()) relies on this to group items.
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.