Paper2Agent_decoupleRpy / scripts /_vst_transform.R
Annie Voigt
feat(sears): assemble scripts for gse205154 vst + filtered_tmm siblings
76bba32
Raw
History Blame Contribute Delete
1.49 kB
#!/usr/bin/env Rscript
# DESeq2 variance-stabilizing transform for the GSE205154 (Sears) VST sibling.
#
# Reads a gzipped integer counts matrix (genes x samples; first column = gene id,
# header row = sample ids), applies DESeq2::vst (blind, no design — this is a QC/
# scoring transform, not a DE fit), and writes the gzipped VST matrix (same
# orientation). Called as an Rscript subprocess from
# assemble_gse205154_sears_vst.py (the ADR-0002 Rscript-subprocess pattern; no
# rpy2). VST output is log2-like and homoscedastic → biodata-registry maps it to
# data_level=log_expression (already-log; Path B). See ADR-0015.
#
# Usage: Rscript _vst_transform.R <counts_in.tsv.gz> <vst_out.tsv.gz>
suppressMessages(library(DESeq2))
args <- commandArgs(trailingOnly = TRUE)
if (length(args) != 2L) stop("usage: _vst_transform.R <counts_in.tsv.gz> <vst_out.tsv.gz>")
inp <- args[[1]]
outp <- args[[2]]
cts <- as.matrix(read.delim(gzfile(inp), row.names = 1, check.names = FALSE))
storage.mode(cts) <- "integer"
cat(sprintf(" R: counts matrix %d genes x %d samples\n", nrow(cts), ncol(cts)))
# vst() is DESeq2's fast VST (fits the dispersion trend on nsub genes, then
# applies the closed-form transform to all genes). blind=TRUE => design-agnostic.
vsd <- vst(cts, blind = TRUE)
cat(sprintf(" R: vst done; range %.3f .. %.3f\n", min(vsd), max(vsd)))
con <- gzfile(outp, "wt")
write.table(vsd, con, sep = "\t", quote = FALSE, col.names = NA)
close(con)
cat(sprintf(" R: wrote %s\n", outp))