trialdiff does not attempt to replace low-level data
frame comparison. It builds on the observation that detection is a
solved problem, while clinical interpretation and
downstream impact are not.
| Tool / package | What it does | Where it stops | How trialdiff relates |
|---|---|---|---|
diffdf |
Detailed cell-level diff of two data frames, with keys | No clinical categorisation, no lineage, no impact | Optional low-level backend (backend = "diffdf");
trialdiff adds the clinical layers |
waldo |
General R object comparison, used by testthat |
General purpose, not clinical | Optional low-level equality backend
(backend = "waldo") |
dplyr / base |
Joins and set operations | Building blocks only | Used internally; no user-facing duplication |
haven |
Read SAS/SPSS/Stata | Transport only | Input reader for compare_cut() |
admiral |
ADaM derivation | Does not compare data cuts | Downstream of the comparison; lineage edges can point at
admiral derivations |
metacore / metatools |
Metadata management and dataset checking | Metadata, not data-cut diffs | lineage_from_metadata() derives a lineage graph from a
metacore object |
cards |
Analysis Results Data | Results, not change detection | Impacted “analysis” nodes can be cards/ARD objects |
tern / rtables |
TLG generation | Output generation | Outputs (TLFs) are lineage nodes flagged for review |
SAS PROC COMPARE |
Dataset comparison, value/label/length differences | No classification, lineage or impact | Conceptual ancestor; trialdiff is the R/pharmaverse
equivalent plus context |
| Commercial platforms | End-to-end clinical data management and validation | Closed, licence-bound | trialdiff is open-source and scriptable |
haven-imported SAS datasets and
admiral-derived ADaM.label attribute, which haven,
metacore and admiral all set.admiral
derivations, cards ARDs and
tern/rtables outputs.The novelty is not in comparison. It is in the combination of:
No package in the pharmaverse currently occupies this position. See
the project proposal in proposal/ for the full gap analysis
and roadmap.