Skip to contents

Online documentation

This vignette displays pre-computed results. Run the targets pipeline locally for interactive analysis.

Overview

See the Glossary for term definitions used throughout this project.

  • Patient demographics, biospecimen characteristics, and RNA-seq quality metrics
  • DuckDB queries against underlying parquet files
  • Cytogenetic alteration frequencies and co-occurrence patterns

All summaries are pre-computed as targets (vig_*). Placeholder messages appear in place of plots when pre-computed outputs are not yet available.

Clinical Demographics

  • Patients: 995
  • Variables: 88
  • Data completeness: 95.8%

Age at Diagnosis

Generating code
{
    if (is.null(eda_clinical_summary))
        return(NULL)
    clin <- eda_clinical_summary
    if (is.null(clin$age_years) || length(clin$age_years) ==
        0)
        return(NULL)
    age_df <- data.frame(age = clin$age_years)
    med_age <- sprintf("%.1f", median(clin$age_years, na.rm = TRUE))
    ggplot2::ggplot(age_df, ggplot2::aes(x = age)) + ggplot2::geom_histogram(bins = 30,
        fill = "steelblue", colour = "white") + ggplot2::geom_vline(xintercept = median(clin$age_years,
        na.rm = TRUE), linetype = "dashed", colour = "red") +
        ggplot2::labs(x = "Age (years)", y = "Number of Patients",
            title = "Age at Diagnosis", subtitle = paste0("n = ",
                length(clin$age_years), " patients, median = ",
                med_age, " years"), caption = paste0("Age at diagnosis for ",
                length(clin$age_years), " CoMMpass patients. ",
                "x-axis: age in years (converted from GDC days via / 365.25); ",
                "y-axis: number of patients. ", "Median = ",
                med_age, " years (dashed red line). ", "Source: GDC clinical. ",
                "See glossary for age unit conventions; ", "survival-analysis Cox models include age as a covariate.")) +
        ggplot2::theme_minimal() + ggplot2::theme(plot.caption = ggplot2::element_text(size = 7,
        hjust = 0, lineheight = 1.2))
}

Gender Distribution

Generating code
{
    if (is.null(eda_clinical_summary))
        return(NULL)
    clin <- eda_clinical_summary
    if (is.null(clin$gender_table))
        return(NULL)
    gt <- clin$gender_table
    gt$Percentage <- sprintf("%.1f%%", 100 * gt$Freq/sum(gt$Freq))
    caption <- paste0("Gender distribution for ", clin$n_patients,
        " CoMMpass patients. ", "Var1 = GDC gender category (male/female). ",
        "Freq = number of patients. ", "Percentage = proportion of total cohort. ",
        "Data: GDC clinical ", "(https://portal.gdc.cancer.gov/projects/MMRF-COMMPASS).")
    DT::datatable(gt, rownames = FALSE, filter = "top", options = list(pageLength = 10,
        scrollX = TRUE), caption = htmltools::tags$caption(style = "caption-side: top; text-align: left;",
        caption))
}
Gender distribution for 995 CoMMpass patients. Var1 = GDC gender category (male/female). Freq = number of patients. Percentage = proportion of total cohort. Data: GDC clinical (https://portal.gdc.cancer.gov/projects/MMRF-COMMPASS).
Gender Freq Percentage
female 393 39.5%
male 602 60.5%

Race Distribution

Generating code
{
    if (is.null(eda_clinical_summary))
        return(NULL)
    clin <- eda_clinical_summary
    if (is.null(clin$race_table))
        return(NULL)
    rt <- clin$race_table
    rt$Percentage <- sprintf("%.1f%%", 100 * rt$Freq/sum(rt$Freq))
    caption <- paste0("Race distribution for ", clin$n_patients,
        " CoMMpass patients. ", "Var1 = self-reported race category (GDC definitions). ",
        "Freq = number of patients. ", "Percentage = proportion of total cohort. ",
        "Categories from GDC clinical data.")
    DT::datatable(rt, rownames = FALSE, filter = "top", options = list(pageLength = 10,
        scrollX = TRUE), caption = htmltools::tags$caption(style = "caption-side: top; text-align: left;",
        caption))
}
Race distribution for 995 CoMMpass patients. Var1 = self-reported race category (GDC definitions). Freq = number of patients. Percentage = proportion of total cohort. Categories from GDC clinical data.
Race Freq Percentage
asian 14 1.4%
black or african american 138 13.9%
not allowed to collect 19 1.9%
not reported 188 18.9%
other 6 0.6%
white 630 63.3%

Vital Status

Generating code
{
    if (is.null(eda_clinical_summary))
        return(NULL)
    clin <- eda_clinical_summary
    if (is.null(clin$vital_table))
        return(NULL)
    vt <- clin$vital_table
    vt$Percentage <- sprintf("%.1f%%", 100 * vt$Freq/sum(vt$Freq))
    caption <- paste0("Vital status for ", clin$n_patients, " CoMMpass patients. ",
        "Status = Alive (censored at last follow-up) or Dead (event observed). ",
        "Freq = number of patients. ", "Percentage = proportion of total cohort. ",
        "Data: GDC clinical.")
    DT::datatable(vt, rownames = FALSE, filter = "top", options = list(pageLength = 10,
        scrollX = TRUE), caption = htmltools::tags$caption(style = "caption-side: top; text-align: left;",
        caption))
}
Vital status for 995 CoMMpass patients. Status = Alive (censored at last follow-up) or Dead (event observed). Freq = number of patients. Percentage = proportion of total cohort. Data: GDC clinical.
Status Freq Percentage
Alive 804 80.8%
Dead 191 19.2%

ISS Staging

The International Staging System (ISS) classifies multiple myeloma into three stages based on serum beta-2 microglobulin and albumin levels. Higher stages indicate more advanced disease and worse prognosis.

  • Patients with ISS data: 995
  • Missing ISS: 0
  • Source column: iss_stage

ISS Stage Distribution

Generating code
{
    if (is.null(eda_iss_summary))
        return(NULL)
    iss <- eda_iss_summary
    if (!isTRUE(iss$available))
        return(NULL)
    caption <- paste0("ISS stage distribution for ", iss$n_with_iss,
        " patients with staging data (", iss$n_missing, " missing). ",
        "ISS = International Staging System ", "(https://doi.org/10.1200/JCO.2005.04.242). ",
        "Stage I = beta-2 microglobulin < 3.5 mg/L and albumin >= 3.5 g/dL. ",
        "Stage II = not I or III. ", "Stage III = beta-2 microglobulin >= 5.5 mg/L. ",
        "Freq = number of patients in each stage.")
    DT::datatable(iss$iss_table, rownames = FALSE, filter = "top",
        options = list(pageLength = 10, scrollX = TRUE), caption = htmltools::tags$caption(style = "caption-side: top; text-align: left;",
            caption))
}
ISS stage distribution for 995 patients with staging data (0 missing). ISS = International Staging System (https://doi.org/10.1200/JCO.2005.04.242). Stage I = beta-2 microglobulin < 3.5 mg/L and albumin >= 3.5 g/dL. Stage II = not I or III. Stage III = beta-2 microglobulin >= 5.5 mg/L. Freq = number of patients in each stage.
ISS_Stage Freq Percentage
I 348 35.0%
II 353 35.5%
III 266 26.7%
Unknown 28 2.8%
Generating code
{
    if (is.null(eda_iss_summary))
        return(NULL)
    iss <- eda_iss_summary
    if (!isTRUE(iss$available) || nrow(iss$iss_table) == 0)
        return(NULL)
    iss_plot <- iss$iss_table[!is.na(iss$iss_table$ISS_Stage),
        ]
    if (nrow(iss_plot) == 0)
        return(NULL)
    ggplot2::ggplot(iss_plot, ggplot2::aes(x = ISS_Stage, y = Freq)) +
        ggplot2::geom_col(fill = "steelblue") + ggplot2::labs(x = "ISS Stage",
        y = "Number of Patients", title = "ISS Stage Distribution",
        subtitle = paste0("n = ", sum(iss_plot$Freq), " patients with staging data"),
        caption = paste0("ISS stage distribution for ", sum(iss_plot$Freq),
            " patients with staging data. ", "Stage I: B2M < 3.5 mg/L + albumin >= 3.5 g/dL. ",
            "Stage II: not I or III. Stage III: B2M >= 5.5 mg/L. ",
            "x-axis: ISS stage; y-axis: number of patients. ",
            "Source: ISS (Greipp et al. 2005, doi:10.1200/JCO.2005.04.242). ",
            "See survival-analysis KM curves by ISS for prognostic impact.")) +
        ggplot2::theme_minimal() + ggplot2::theme(plot.caption = ggplot2::element_text(size = 7,
        hjust = 0, lineheight = 1.2))
}

Age by ISS Stage

Generating code
{
    if (is.null(eda_iss_summary))
        return(NULL)
    iss <- eda_iss_summary
    if (!isTRUE(iss$available) || is.null(iss$age_by_iss))
        return(NULL)
    age_tbl <- do.call(rbind, lapply(names(iss$age_by_iss), function(stage) {
        x <- iss$age_by_iss[[stage]]
        data.frame(ISS_Stage = stage, N = x$n, Mean_Age = sprintf("%.1f",
            x$mean), Median_Age = sprintf("%.1f", x$median),
            SD = sprintf("%.1f", x$sd))
    }))
    caption <- paste0("Age at diagnosis (years) by ISS stage. ",
        "ISS_Stage = International Staging System stage (I/II/III). ",
        "N = number of patients. ", "Mean_Age, Median_Age = central tendency in years. ",
        "SD = standard deviation. ", "GDC stores age in days; converted via age / 365.25.")
    DT::datatable(age_tbl, rownames = FALSE, filter = "top",
        options = list(pageLength = 10, scrollX = TRUE), caption = htmltools::tags$caption(style = "caption-side: top; text-align: left;",
            caption))
}
Age at diagnosis (years) by ISS stage. ISS_Stage = International Staging System stage (I/II/III). N = number of patients. Mean_Age, Median_Age = central tendency in years. SD = standard deviation. GDC stores age in days; converted via age / 365.25.
ISS_Stage N Mean_Age Median_Age SD
I 324 61.1 61.7 9.7
II 339 63.5 63.9 10.0
III 262 65.4 65.5 11.5
Unknown 28 68.3 66.3 10.3

Survival Endpoints

Days to Death

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
    8.0   209.5   475.0   525.5   723.5  1753.0 
  • Censoring rate: 80.8% (patients still alive at last follow-up)

Days to Last Follow-up

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
   -3.0   402.5   778.0   776.1  1085.5  1984.0 

Biospecimen Overview

  • Total samples: 2,119
  • Variables: 31

Sample Types

Samples per Patient

RNA-seq Quality

  • Genes: 60,660
  • Samples: 100
  • Total counts: 6,045,546,169
  • Median library size: 58,030,298
  • Sparsity (% zero entries): 49.1%

Library Size Distribution

Genes Detected per Sample

Sample Clustering (PCA)

Principal component analysis on the top 500 most variable genes (VST-transformed) reveals sample-level structure. Points are colored by clinical covariates to check for batch effects or biological groupings.

Cytogenetic Landscape

Cytogenetic markers from FISH testing are key to myeloma risk stratification (IMWG 2014 criteria). High-risk alterations include t(4;14), t(14;16), del(17p), and gain(1q).

Alteration Frequencies

Generating code
{
    if (is.null(cyto_frequency_summary) || nrow(cyto_frequency_summary) ==
        0)
        return(NULL)
    caption <- paste0("Cytogenetic alteration frequencies from FISH testing. ",
        "Marker = FISH probe target. ", "Positive = patients with alteration detected. ",
        "Tested = patients with FISH data for that marker. ",
        "% = prevalence among tested patients. ", "High-risk markers per IMWG 2014: t(4;14), t(14;16), del(17p), gain(1q). ",
        "t() = translocation, del() = deletion, gain() = extra copy. ",
        "See data dictionary for marker definitions.")
    DT::datatable(cyto_frequency_summary, rownames = FALSE, filter = "top",
        options = list(pageLength = 15, scrollX = TRUE), colnames = c("Marker",
            "Positive", "Tested", "%"), caption = htmltools::tags$caption(style = "caption-side: top; text-align: left;",
            caption))
}
Cytogenetic alteration frequencies from FISH testing. Marker = FISH probe target. Positive = patients with alteration detected. Tested = patients with FISH data for that marker. % = prevalence among tested patients. High-risk markers per IMWG 2014: t(4;14), t(14;16), del(17p), gain(1q). t() = translocation, del() = deletion, gain() = extra copy. See data dictionary for marker definitions.
marker n_positive n_tested pct
t(4;14) 0 0 NA
t(11;14) 0 0 NA
t(14;16) 0 0 NA
t(14;20) 0 0 NA
del(17p) 0 0 NA
del(1p) 0 0 NA
gain(1q) 0 0 NA
Any high-risk 0 0 NA

Oncoprint

Co-occurrence Analysis

Generating code
{
    if (is.null(cyto_cooccurrence) || nrow(cyto_cooccurrence) ==
        0)
        return(NULL)
    marker_labels <- c(t_4_14 = "t(4;14)", t_11_14 = "t(11;14)",
        t_14_16 = "t(14;16)", t_14_20 = "t(14;20)", del_17p = "del(17p)",
        del_1p = "del(1p)", gain_1q = "gain(1q)")
    display <- cyto_cooccurrence
    display$marker1 <- ifelse(display$marker1 %in% names(marker_labels),
        marker_labels[display$marker1], display$marker1)
    display$marker2 <- ifelse(display$marker2 %in% names(marker_labels),
        marker_labels[display$marker2], display$marker2)
    display_df <- display[, c("marker1", "marker2", "odds_ratio",
        "pvalue", "padj", "n_both", "tendency")]
    display_df$odds_ratio <- round(display_df$odds_ratio, 2)
    display_df$pvalue <- round(display_df$pvalue, 4)
    display_df$padj <- round(display_df$padj, 4)
    caption <- paste0("Pairwise co-occurrence analysis of cytogenetic markers ",
        "(Fisher's exact test, BH-adjusted). ", "Marker 1/2 = FISH probe targets tested pairwise. ",
        "Odds Ratio > 1 = co-occurrence; < 1 = mutual exclusivity. ",
        "p-value = Fisher's exact test. ", "Adjusted p = Benjamini-Hochberg corrected. ",
        "Both+ = patients positive for both markers. ", "Tendency = co-occurrence or mutual exclusivity. ",
        "* = padj < 0.05.")
    DT::datatable(display_df, rownames = FALSE, filter = "top",
        options = list(pageLength = 15, scrollX = TRUE), colnames = c("Marker 1",
            "Marker 2", "Odds Ratio", "p-value", "Adjusted p",
            "Both+", "Tendency"), caption = htmltools::tags$caption(style = "caption-side: top; text-align: left;",
            caption))
}
Pairwise co-occurrence analysis of cytogenetic markers (Fisher’s exact test, BH-adjusted). Marker 1/2 = FISH probe targets tested pairwise. Odds Ratio > 1 = co-occurrence; < 1 = mutual exclusivity. p-value = Fisher’s exact test. Adjusted p = Benjamini-Hochberg corrected. Both+ = patients positive for both markers. Tendency = co-occurrence or mutual exclusivity. * = padj < 0.05.
marker1 marker2 odds_ratio pvalue padj n_both tendency
t(4;14) t(11;14) 0 1 1 0 none
t(4;14) t(14;16) 0 1 1 0 none
t(4;14) t(14;20) 0 1 1 0 none
t(4;14) del(17p) 0 1 1 0 none
t(4;14) del(1p) 0 1 1 0 none
t(4;14) gain(1q) 0 1 1 0 none
t(11;14) t(14;16) 0 1 1 0 none
t(11;14) t(14;20) 0 1 1 0 none
t(11;14) del(17p) 0 1 1 0 none
t(11;14) del(1p) 0 1 1 0 none
t(11;14) gain(1q) 0 1 1 0 none
t(14;16) t(14;20) 0 1 1 0 none
t(14;16) del(17p) 0 1 1 0 none
t(14;16) del(1p) 0 1 1 0 none
t(14;16) gain(1q) 0 1 1 0 none
t(14;20) del(17p) 0 1 1 0 none
t(14;20) del(1p) 0 1 1 0 none
t(14;20) gain(1q) 0 1 1 0 none
del(17p) del(1p) 0 1 1 0 none
del(17p) gain(1q) 0 1 1 0 none
del(1p) gain(1q) 0 1 1 0 none

Cytogenetic markers are used for survival stratification and inform differential expression analysis.

DuckDB Query Examples

The package provides two functions for querying the parquet files:

Example: Simple Query

Show code
safe_tar_read("code_eda_simple_query")

One-shot query (returns data frame)

clinical <- query_commpass_parquet(“clinical”) head(clinical)

With dplyr/tbl syntax

con <- DBI::dbConnect(duckdb::duckdb()) clinical_tbl <- get_commpass_tbl(“clinical”, con = con) females <- clinical_tbl |> dplyr::filter(gender == “female”) |> dplyr::collect() DBI::dbDisconnect(con, shutdown = TRUE)

Generating code
{
    if (is.null(eda_duckdb_demo))
        return(NULL)
    demo <- eda_duckdb_demo
    caption <- paste0("First 10 patients from clinical data via dplyr/DuckDB query. ",
        "age_at_diagnosis is in days (GDC convention; divide by 365.25 for years). ",
        "This demonstrates zero-copy DuckDB access to parquet files.")
    DT::datatable(demo$demo_result, rownames = FALSE, filter = "top",
        options = list(pageLength = 10, scrollX = TRUE), caption = htmltools::tags$caption(style = "caption-side: top; text-align: left;",
            caption))
}
First 10 patients from clinical data via dplyr/DuckDB query. age_at_diagnosis is in days (GDC convention; divide by 365.25 for years). This demonstrates zero-copy DuckDB access to parquet files.
submitter_id gender vital_status age_at_diagnosis
MMRF_2240 male Alive 24502
MMRF_1038 male Dead 25255
MMRF_1054 female Alive 21310
MMRF_2174 male Dead 31241
MMRF_2168 male Alive 18590
MMRF_2559 male Alive 18945
MMRF_1861 female Alive 26303
MMRF_2250 female Alive 26087
MMRF_2774 female Alive NA
MMRF_1293 male Alive 21678

Example: Aggregation with DuckDB

Show code
safe_tar_read("code_eda_aggregation")

Lazy tbl for dplyr-style queries

con <- DBI::dbConnect(duckdb::duckdb()) clinical_tbl <- get_commpass_tbl(“clinical”, con = con)

result <- clinical_tbl |> dplyr::filter(!is.na(gender)) |> dplyr::group_by(gender) |> dplyr::summarise( n = dplyr::n(), mean_age_years = mean(age_at_diagnosis / 365.25, na.rm = TRUE) ) |> dplyr::collect()

DBI::dbDisconnect(con, shutdown = TRUE)

Generating code
{
    if (is.null(eda_duckdb_demo))
        return(NULL)
    demo <- eda_duckdb_demo
    caption <- paste0("Patient count and mean age (years) by gender via ",
        "dplyr/DuckDB aggregation. ", "n = number of patients. ",
        "mean_age = average age at diagnosis in years.")
    DT::datatable(demo$agg_result, rownames = FALSE, filter = "top",
        options = list(pageLength = 10, scrollX = TRUE), caption = htmltools::tags$caption(style = "caption-side: top; text-align: left;",
            caption))
}
Patient count and mean age (years) by gender via dplyr/DuckDB aggregation. n = number of patients. mean_age = average age at diagnosis in years.
gender n mean_age_years
male 580 63.3
female 373 63.4

Cross-dataset Integration

Patient ID overlap between clinical and biospecimen datasets:

  • Clinical patients: 995
  • Biospecimen patients: 2,119
  • Shared (in both): 0
  • Clinical only: 995
  • Biospecimen only: 2,119

Clinical-Informed Normalisation

Standard z-scoring treats all variation equally, but for clinical biomarkers this compresses the clinically important normal range and expands the uninformative extreme range. The SCOPE method (Hussain et al. 2024) uses clinical reference ranges to normalise biomarkers, preserving clinically meaningful variation.

Reference Ranges

Clinical reference ranges for myeloma-relevant biomarkers. Used by normalize_clinical() for clinical-informed normalisation. Values within [low, high] are in the normal range; values outside are compressed by sigmoid. Source: standard laboratory ranges.
biomarker low high unit
creatinine 0.6 1.2 mg/dL
albumin 3.5 5.0 g/dL
hemoglobin 12.0 17.5 g/dL
calcium 8.5 10.5 mg/dL
ldh 120.0 250.0 U/L
b2m 0.8 2.2 mg/L
platelets 150.0 400.0 10^3/uL
flc_kappa 3.3 19.4 mg/L
flc_lambda 5.7 26.3 mg/L

Clinical vs Z-Score Comparison

Data not available: Target vig_normalisation_comparison returned NULL. See Data Sources.

Missingness as Signal

Missing data in clinical datasets is rarely random. In multiple myeloma, FISH testing is expensive and may be selectively ordered for patients with suspected high-risk disease. If missingness correlates with survival, it suggests the data is missing not at random (MNAR) — the missingness itself is clinically informative.

Variable Missingness

Variables with any missingness in the clinical dataset. Category = variable group (demographic/staging/FISH/biomarker/outcome). N = 995 patients. Source: GDC clinical data via TCGAbiolinks.
Variable Category N Missing % Missing
year_of_birth other 995 100.0
year_of_death outcome 995 100.0
cause_of_death outcome 807 81.1
days_to_death outcome 804 80.8
days_to_birth outcome 42 4.2

Does Missingness Predict Survival?

Cox regression testing whether patients with missing values for each variable have different survival outcomes. A significant HR suggests the missingness mechanism is informative (MNAR).

Cox regression: Surv(time, status) ~ is_missing(variable). Tests whether patients with missing data have different survival. HR > 1 = missing → worse survival; HR < 1 = missing → better. MNAR = missingness not at random (clinically informative). Only variables with >= 5% missingness tested.
Variable HR CI p_value Pct_Missing Interpretation
cause_of_death 0 [0-0.01] 0.000 81.1 Missing → better survival (MNAR: low-risk patients not tested?)
days_to_death 0 [0-Inf] 0.992 80.8 No association (consistent with MCAR)

Data Sources

Results in this vignette are derived from the MMRF CoMMpass study (MMRF-COMMPASS, ~1,143 patients), downloaded via TCGAbiolinks. The pipeline runs with a configurable sample_limit (default 200; CI uses 20).

For full citations, data access tiers, and the distinction between pipeline data and synthetic test data, see the Data Sources vignette.

Recent Changes

Recent project commits with lines added, files changed, and change categories.

Last 20 project commits with change statistics. Date = commit date; Type = conventional-commit prefix (feat/fix/docs/ci/refactor/test/chore). Files = number of files modified; +Lines/-Lines = lines added/removed. Source: git log –numstat. See changes-by-type table for aggregate breakdown.
date type summary n_files lines_added lines_removed file_categories
2026-03-14 Bug Fix fix(pipeline): Fix 11 NULL targets — DE condition, ID matching, consensus type 41 146 47 Other, R Source
2026-03-14 Bug Fix fix(cachix): Remove –watch-mode auto flag (already default) 1 1 1 Other
2026-03-14 Bug Fix fix(pipeline): Fix 3 NULL-target bugs, auto-generate package.nix (#93) 87 235 80 Config, Docs, Other, R Source
2026-03-14 Bug Fix fix(nix): Fix cachix signing key, rebuild Bioconductor-dependent targets 2 0 0 Other
2026-03-14 New Feature feat(captions): Add dynamic captions to 34 table/plot targets 22 579 89 Other, R Source
2026-03-14 Bug Fix fix(vignettes): Enforce zero-computation rule — 22 violations → 0 32 360 764 Other, R Source, Vignettes
2026-03-13 Bug Fix fix(vignettes): Convert kable RDS to data.frames, fix telemetry eval guards 18 8 2 Other, Vignettes
2026-03-13 Bug Fix fix(ci): Save data frames (not DT widgets) to RDS for Nix portability 3 0 0 Other
2026-03-13 Bug Fix fix(vignettes): Use Quarto #| eval syntax for pkgdown-banner chunks 11 44 11 Vignettes
2026-03-13 Refactoring refactor(targets): Move Bioconductor packages to per-target declarations 11 35 17 Other, R Source, Vignettes
2026-03-13 New Feature feat(vignettes): Add code provenance, kable→DT conversion, caption compliance 35 1004 437 CI/CD, Other, R Source, Vignettes
2026-03-13 Bug Fix fix(vignettes): Skip NULL RDS in safe_tar_read, return invisible(NULL) 11 22 22 Vignettes
2026-03-13 Bug Fix fix(glossary): Prevent double DT::datatable() wrapping in glossary-table chunk 1 3 1 Vignettes
2026-03-13 CI/CD ci: Show quarto errors with quiet=FALSE, render individual vignettes in diagnostic 1 20 6 CI/CD
2026-03-13 CI/CD ci: Add verbose quarto error diagnostics on build failure 1 14 1 CI/CD
2026-03-13 Bug Fix fix(vignettes): Strip Nix paths from DT widgets, auto-wrap data frames 25 66 28 CI/CD, Other, Vignettes
2026-03-13 CI/CD ci: Add diagnostic quarto render step to debug build failure 1 17 0 CI/CD
2026-03-13 Bug Fix fix(vignettes): Revert safe_tar_read placeholder, guard gene-report 11 12 56 Vignettes
2026-03-13 Maintenance chore: Export vig_count_distribution_plot as ggplot RDS (513KB) 1 0 0 Other
2026-03-13 Bug Fix fix(vignettes): Enable code eval in CI with RDS fallback 80 113 74 CI/CD, Other, R Source, Vignettes

Reproducibility

Git Commit Info (click to expand)
Generating code
{
    if (!requireNamespace("gert", quietly = TRUE))
        return(NULL)
    tryCatch({
        info <- gert::git_info()
        log1 <- gert::git_log(max = 1)
        git_df <- data.frame(Item = c("Commit Hash", "Author",
            "Time", "Branch"), Value = c(info$commit, log1$author,
            as.character(log1$time), info$shorthand), stringsAsFactors = FALSE)
        DT::datatable(git_df, rownames = FALSE, options = list(pageLength = 10,
            dom = "t", scrollX = TRUE), caption = htmltools::tags$caption(style = "caption-side: top; text-align: left;",
            "Git repository state at pipeline build time."))
    }, error = function(e) NULL)
}
Git repository state at pipeline build time.
Item Value
Commit Hash c20a60ac5d4cd228607ef8c3af571c91866a902d
Author John Gavin <john.b.gavin@gmail.com>
Time 2026-03-13 20:37:26
Branch main
Session Info (click to expand)
Show code
sessionInfo()
#> R version 4.5.3 (2026-03-11)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 24.04.3 LTS
#> 
#> Matrix products: default
#> BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 
#> LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so;  LAPACK version 3.12.0
#> 
#> locale:
#>  [1] LC_CTYPE=C.UTF-8       LC_NUMERIC=C           LC_TIME=C.UTF-8       
#>  [4] LC_COLLATE=C.UTF-8     LC_MONETARY=C.UTF-8    LC_MESSAGES=C.UTF-8   
#>  [7] LC_PAPER=C.UTF-8       LC_NAME=C              LC_ADDRESS=C          
#> [10] LC_TELEPHONE=C         LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C   
#> 
#> time zone: UTC
#> tzcode source: system (glibc)
#> 
#> attached base packages:
#> [1] stats     graphics  grDevices utils     datasets  methods   base     
#> 
#> loaded via a namespace (and not attached):
#>  [1] base64url_1.4       gtable_0.3.6        jsonlite_2.0.0     
#>  [4] dplyr_1.2.0         compiler_4.5.3      tidyselect_1.2.1   
#>  [7] callr_3.7.6         scales_1.4.0        yaml_2.3.12        
#> [10] fastmap_1.2.0       ggplot2_4.0.2       R6_2.6.1           
#> [13] labeling_0.4.3      generics_0.1.4      igraph_2.2.2       
#> [16] knitr_1.51          backports_1.5.0     targets_1.12.0     
#> [19] tibble_3.3.1        pillar_1.11.1       RColorBrewer_1.1-3 
#> [22] rlang_1.1.7         xfun_0.57           S7_0.2.1           
#> [25] otel_0.2.0          cli_3.6.5           withr_3.0.2        
#> [28] magrittr_2.0.4      ps_1.9.1            digest_0.6.39      
#> [31] grid_4.5.3          processx_3.8.6      secretbase_1.2.0   
#> [34] lifecycle_1.0.5     prettyunits_1.2.0   vctrs_0.7.2        
#> [37] evaluate_1.0.5      glue_1.8.0          data.table_1.18.2.1
#> [40] farver_2.1.2        codetools_0.2-20    rmarkdown_2.30     
#> [43] tools_4.5.3         pkgconfig_2.0.3     htmltools_0.5.9