File size: 1,494 Bytes
76bba32
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/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))