← Back to all sparks
X

xportr

ANALYTICS
Velocity0.0

Tools to build CDISC compliant data sets and check for CDISC compliance.

The CDISC transport writer collapsed six pipeline calls into one, then spent two years hardening it

cdiscclinical-submissionssas-transportpharmaversemetadatabreaking-changes
Current state
xportr applies CDISC metadata — variable types, lengths, labels, formats, ordering — to R data frames and writes the SAS transport files that go into regulatory submissions. Since v0.4.0 the package has had a single entry point, xportr_process(), that runs the whole chain and writes, and metadata arrives as a plain specification rather than a metacore object. The v0.5.0 release in January 2026 finished the cleanup by deleting every deprecated argument left over from that redesign.
Where it's heading
The work has moved from building the pipeline to defending it against the ways submission data actually arrives: grouped data frames now raise a warning, date and time variables get class checks, illegal characters are resolved rather than erroring, and xportr_write() warns before a file crosses 5GB instead of producing an unusable artifact. Contributor volume is high and spread across sponsors — Atorus, Roche, GSK and others show up in the PR lists — which is what keeps a validated-context package moving without a single owner.
Prediction
With deprecations cleared in 0.5.0, the next cycle likely targets more input-shape validation of the kind 0.5.0 started — the grouped-data and datetime-class checks read as the first two of a series. Nothing in these entries points to a new output format.

Recent moves

  1. 7mo ago

    Deprecated arguments deleted; 5GB and datetime guards added

    Removes every deprecated argument across the xportr functions, closing out the API migration that v0.4.0 started — code still passing the old arguments breaks here. Alongside it: a warning when an export would exceed 5GB, class checks on date/time variables, a warning on grouped input, an illegal-character fix, and repairs to the verbose flags including a missing xportr.order_verbose option.

    View source ↗
  2. 1y ago

    Test fixes for the metacore 0.2.0 update

    Repairs tests that broke when metacore released v0.2.0, plus a version bump. No change to what xportr produces.

    View source ↗
  3. 1y ago

    hms accepted as a numeric type; domain logging filled in

    Adds hms to xportr.numeric_types so time variables survive the type pass, corrects a misleading message in xportr_order(), and fills in missing domain logging. Small, but the hms handling removes a manual workaround for any dataset carrying time-of-day.

    View source ↗
  4. 1y ago

    File-size limit moves into xportr_write, deprecating xportr_split

    Moves file splitting inside xportr_write() as a maximum-size-in-GB argument and deprecates the standalone xportr_split(). Consistent with the 0.4.0 direction of folding steps into the main path rather than exposing them as separate functions callers have to sequence themselves.

    View source ↗
  5. 2y ago

    xportr_process() runs the whole pipeline in one call

    ⚡ SPARK

    The release that redefines how xportr is used: xportr_process() runs the full metadata chain and writes in one call, xportr_options() manages configuration centrally, xportr_write() takes metadata directly while the metacore argument is hard-deprecated, and lengths derive from actual data. It is the origin of every deprecation that v0.5.0 later deletes.

    View source ↗
  6. 2y ago

    Unused dependencies removed

    Drops unused package dependencies. Housekeeping ahead of the 0.4.0 redesign.

    View source ↗