| Title: | Reproducible Analysis Case Studies for the PhysioExperiment Ecosystem |
|---|---|
| Description: | A version-controlled database of self-contained, reproducible analysis case studies on public physiological data, built on the PhysioExperiment ecosystem. Each case states a proposition, answers a question on a public dataset and completes through to figures and a conclusion, with every reported number traced to an artifact and the whole op-DAG replayable byte-identically. The package ships the verified run bundles and a small API to browse the case metadata, open a case's bundle, and check the invariants that every case must satisfy. |
| Authors: | Yusuke Matsui [aut, cre] (ORCID: <https://orcid.org/0000-0003-3977-4313>) |
| Maintainer: | Yusuke Matsui <[email protected]> |
| License: | MIT + file LICENSE |
| Version: | 0.7.4 |
| Built: | 2026-10-03 13:42:47 UTC |
| Source: | https://github.com/x-biosignal/PhysioRecipes |
The substrate bundle (frozen pre-registration, run manifest, op-DAG, terminal
artifact, claims and verification report) — the evidence a reader re-runs or
audits. The same shape PhysioLake::physioPutBundle() stores with lineage.
case_bundle(id)case_bundle(id)
id |
Case id. |
Absolute path to the case's bundle/ directory.
if (length(list.files(system.file("cases", package = "PhysioRecipes")))) { id <- list_cases()$id[1] list.files(case_bundle(id)) }if (length(list.files(system.file("cases", package = "PhysioRecipes")))) { id <- list_cases()$id[1] list.files(case_bundle(id)) }
Path to a case directory or one of its files
case_path(id, ...)case_path(id, ...)
id |
Case id. |
... |
Optional path components under the case directory
(e.g. |
An absolute path.
if (length(list.files(system.file("cases", package = "PhysioRecipes")))) { id <- list_cases()$id[1] case_path(id) case_path(id, "case.json") }if (length(list.files(system.file("cases", package = "PhysioRecipes")))) { id <- list_cases()$id[1] case_path(id) case_path(id, "case.json") }
The research queue: cases whose open_questions carry an escalate target.
escalations()escalations()
A data.frame of id, title and escalation target(s).
if (length(list.files(system.file("cases", package = "PhysioRecipes")))) escalations()if (length(list.files(system.file("cases", package = "PhysioRecipes")))) escalations()
Read a single case record
get_case(id)get_case(id)
id |
Case id (the case sub-directory name, e.g. |
The parsed case.json as a list.
if (length(list.files(system.file("cases", package = "PhysioRecipes")))) str(get_case(list_cases()$id[1]), max.level = 1)if (length(list.files(system.file("cases", package = "PhysioRecipes")))) str(get_case(list_cases()$id[1]), max.level = 1)
Browse the whole corpus: id, title, modality, ecosystem packages exercised, dataset, reproducibility status and whether the case escalates an open question to a paper.
list_cases()list_cases()
A data.frame, one row per case.
if (length(list.files(system.file("cases", package = "PhysioRecipes")))) list_cases()if (length(list.files(system.file("cases", package = "PhysioRecipes")))) list_cases()
Structural gate (dataset is public; every claim is GROUNDED in the case's
verification_report.json; n_grounded == n_claims; a byte-identical replay is
recorded; a verified/escalated case has all claims grounded). The
pre-registration hash and per-case number tracing are checked by
tools/validate_case.py in CI.
validate_cases(ids = list_cases()$id)validate_cases(ids = list_cases()$id)
ids |
Cases to check (default: all). |
A data.frame with one row per case and a logical ok column.
if (length(list.files(system.file("cases", package = "PhysioRecipes")))) { # Check a few cases (omit `ids` to check the whole corpus). validate_cases(ids = utils::head(list_cases()$id, 3)) }if (length(list.files(system.file("cases", package = "PhysioRecipes")))) { # Check a few cases (omit `ids` to check the whole corpus). validate_cases(ids = utils::head(list_cases()$id, 3)) }