← Back to all sparks
A

artoo

INFRA · APIS
Velocity2.5

Lossless CDISC-Native Input and Output for Clinical Datasets

artoo makes any-to-any clinical dataset conversion lossless by construction.

r-packagesclinical-trialscdiscdata-conversioncharacter-encoding
Current state
artoo reads and writes SAS XPORT, CDISC Dataset-JSON, NDJSON, Parquet and RDS around one canonical metadata model, so a conversion between any two formats carries labels, CDISC types, lengths, display formats, controlled-terminology references and sort keys intact. It is pure R with no SAS or Java runtime. It reached CRAN at 0.1.1 and has spent 0.1.2 and 0.1.3 on the character-encoding edges.
Where it's heading
Recent work is all about text that does not survive a format change. 0.1.3 adds an invalid_encoding dimension to artoo_checks() that flags bytes which are not valid UTF-8 before a writer aborts on them, accepts the SAS OEM/DOS encoding names, and gives the writers on_invalid = "translit" and "fold" so smart punctuation and accented characters resolve to pinned ASCII instead of failing. The fold tables ship as data specifically so the result is identical on every platform, which is the same determinism argument behind C-locale row sorting in 0.1.0.
Prediction
The new WLATIN1-to-UTF-8 migration article and the width warning on write_xpt() point the next attention at length and truncation semantics rather than at additional formats. These notes name no further target format.

Recent moves

  1. 28d ago

    Encoding checks and translit/fold modes for the writers

    Deepens the encoding story rather than widening the format list: check_spec() gains an invalid_encoding dimension that catches mis-declared source encodings early, and the writers accept on_invalid = "translit" and "fold" to resolve smart punctuation and accents to ASCII deterministically. write_xpt() now warns instead of silently widening a column past its declared length.

    View source ↗
  2. 1mo ago

    noLD check fix; codec unchanged

    A CRAN housekeeping patch: the full-precision JSON round-trip test now skips on builds without long double. The notes state the codec itself is unchanged.

    View source ↗
  3. 2mo ago

    Initial CRAN release after resubmission

    The same software as 0.1.0, cleared for CRAN after reviewer feedback: an internal ::: call removed from an example in favour of the exported path, and the CDISC Dataset-JSON and SAS XPORT specifications cited by URL in the Description. It is the distribution milestone for the capability 0.1.0 announced.

    View source ↗
  4. 2mo ago

    Lossless any-to-any CDISC dataset conversion in pure R

    ⚡ SPARK

    The first release, and the one that sets the package's whole premise: a single canonical metadata model that every codec carries, so conversion between any two supported formats preserves the metadata by construction rather than by careful bookkeeping. The encoding work in 0.1.2 and 0.1.3 is this contract being defended at the edges.

    View source ↗