view script.R @ 1:05fbc5c891c5 draft default tip

planemo upload for repository https://github.com/TGAC/earlham-galaxytools/tree/main/tools/plotheatmap commit 6e40bbe92367310e9d3ec69571d08eb49af7c0a6-dirty
author earlhaminst
date Mon, 24 Feb 2025 11:03:02 +0000
parents bd8fd161908b
children
line wrap: on
line source

#!/usr/bin/env Rscript

args <- commandArgs(TRUE)
countDataPath <- args[1]
statsDataPath <- args[2]
logFC <- args[3]
logCPM <- args[4]
pValue <- args[5]
fdr <- args[6]

clusterRow <- args[7]
clusterCol <- args[8]
hclustMethod <- args[9]

mgColumnNm <- as.numeric(args[10])
mgRowNm <- as.numeric(args[11])

pdfWidth <- as.numeric(args[12])
pdfHeight <- as.numeric(args[13])


if (clusterRow == "Yes") {
    clusterRow <- TRUE
} else {
    clusterRow <- NA
}

if (clusterCol == "Yes") {
    clusterCol <- TRUE
} else {
    clusterCol <- NA
}

require(preprocessCore)
require(gplots)

# prepare counts data --------------------------------------------------------
countData <- read.table(countDataPath,
    comment = "",
    sep = "\t"
)

groups <- sapply(as.character(countData[1, -1]), strsplit, ":")
groups <- as.vector(t(countData[1, -1]))

names <- as.vector(t(countData[2, -1]))

countData <- countData[-c(1, 2), ]
rownames(countData) <- countData[, 1]
countData <- countData[, -1]
colnames(countData) <- names

countData <- countData[, order(groups, names)]

# prepare stats data ------------------------------------------------------

statsData <- read.table(statsDataPath,
    sep = "\t",
    header = T
)

colnames(statsData)[-1] <- sapply(colnames(statsData)[-1], function(x) {
    unlist(strsplit(x, ".", fixed = T))[3]
})

wh <- which(abs(statsData$logFC) >= logFC & statsData$logCPM >= logCPM & statsData$PValue <= pValue & statsData$FDR <= fdr)

for (i in 1:ncol(countData)) {
    countData[, i] <- as.numeric(countData[, i])
}

countDataNorm <- normalize.quantiles(as.matrix(countData), copy = T)
countDataNormLog <- log(countDataNorm + 1, 2)

colnames(countDataNormLog) <- colnames(countData)
rownames(countDataNormLog) <- rownames(countData)

# svg("heatmap.svg", width = 3+length(names), height = 1/2*length(wh))
pdf("heatmap.pdf", width = pdfWidth, height = pdfHeight)

heatmap.2(
    countDataNormLog[wh, ],
    density.info = c("none"),
    hclustfun = function(x) hclust(x, method = hclustMethod),
    distfun = function(x) as.dist(1 - cor(t(x))),
    col = bluered(50),
    scale = "row",
    trace = "none",
    Rowv = clusterRow,
    Colv = clusterCol,
    margins = c(mgColumnNm, mgRowNm)
)

dev.off()