comparison dexseq.R @ 0:4ca0e679f21e draft

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/dexseq commit 876fc32b23d3b9c378ddbfbbba27d37d22576c85
author iuc
date Thu, 08 Oct 2015 16:52:01 -0400
parents
children 6e8b61c54ff3
comparison
equal deleted inserted replaced
-1:000000000000 0:4ca0e679f21e
1 ## Setup R error handling to go to stderr
2 options( show.error.messages=F, error = function () { cat( geterrmessage(), file=stderr() ); q( "no", 1, F ) } )
3 # we need that to not crash galaxy with an UTF8 error on German LC settings.
4 Sys.setlocale("LC_MESSAGES", "en_US.UTF-8")
5
6 library("DEXSeq")
7 library('getopt')
8 library('rjson')
9
10
11 options(stringAsfactors = FALSE, useFancyQuotes = FALSE)
12 args <- commandArgs(trailingOnly = TRUE)
13
14 #get options, using the spec as defined by the enclosed list.
15 #we read the options from the default: commandArgs(TRUE).
16 spec = matrix(c(
17 'verbose', 'v', 2, "integer",
18 'help', 'h', 0, "logical",
19 'gtf', 'a', 1, "character",
20 'outfile', 'o', 1, "character",
21 'reportdir', 'r', 1, "character",
22 'factors', 'f', 1, "character",
23 'threads', 'p', 1, "integer",
24 'fdr', 'c', 1, "double"
25 ), byrow=TRUE, ncol=4);
26 opt = getopt(spec);
27
28 # if help was asked for print a friendly message
29 # and exit with a non-zero error code
30 if ( !is.null(opt$help) ) {
31 cat(getopt(spec, usage=TRUE));
32 q(status=1);
33 }
34
35 trim <- function (x) gsub("^\\s+|\\s+$", "", x)
36 opt$samples <- trim(opt$samples)
37 opt$factors <- trim(opt$factors)
38
39 parser <- newJSONParser()
40 parser$addData( opt$factors )
41 factorsList <- parser$getObject()
42
43 sampleTable<-data.frame()
44 countFiles<-c()
45 factorNames<-c()
46 primaryFactor<-""
47 for(factor in factorsList){
48 factorName<-factor[[1]]
49 factorNames<-append(factorNames, paste(factorName,"exon",sep=":"))
50 factorValuesMapList<-factor[[2]]
51 c = length(factorValuesMapList)
52 for (factorValuesMap in factorValuesMapList){
53 for(files in factorValuesMap){
54 for(file in files){
55 if(primaryFactor == "") {
56 countFiles<-append(countFiles,file)
57 }
58 sampleTable[basename(file),factorName]<-paste(c,names(factorValuesMap),sep="_")
59 }
60 }
61 c = c-1
62 }
63 if(primaryFactor == ""){
64 primaryFactor <- factorName
65 }
66 }
67
68 factorNames<-append(factorNames,"exon")
69 factorNames<-append(factorNames,"sample")
70 factorNames<-rev(factorNames)
71 formulaFullModel <- as.formula(paste("", paste(factorNames, collapse=" + "), sep=" ~ "))
72 factorNames <- head(factorNames,-1)
73 formulaReducedModel <- as.formula(paste("", paste(factorNames, collapse=" + "), sep=" ~ "))
74
75 sampleTable
76 formulaFullModel
77 formulaReducedModel
78 primaryFactor
79 countFiles
80 opt$reportdir
81 opt$threads
82 getwd()
83
84 dxd = DEXSeqDataSetFromHTSeq(countFiles, sampleData=sampleTable, design= formulaFullModel, flattenedfile=opt$gtf)
85
86 colData(dxd)
87 dxd <- estimateSizeFactors(dxd)
88 print("Estimated size factors")
89 sizeFactors(dxd)
90 BPPARAM=MulticoreParam(workers=opt$threads)
91 dxd <- estimateDispersions(dxd, formula=formulaFullModel, BPPARAM=BPPARAM)
92 print("Estimated dispersions")
93 dxd <- testForDEU(dxd, fullModel=formulaFullModel, BPPARAM=BPPARAM)
94 print("tested for DEU")
95 dxd <- estimateExonFoldChanges(dxd, fitExpToVar=primaryFactor, BPPARAM=BPPARAM)
96 print("Estimated fold changes")
97 res <- DEXSeqResults(dxd)
98 print("Results")
99 table(res$padj <= opt$fdr)
100 resSorted <- res[order(res$padj),]
101 head(resSorted)
102
103 export_table <- as.data.frame(resSorted)
104 last_column <- ncol(export_table)
105 for(i in 1:nrow(export_table)) {
106 export_table[i,last_column] <- paste(export_table[i,last_column][[1]],collapse=", ")
107 }
108 write.table(export_table, file = opt$outfile, sep="\t", quote = FALSE, col.names = FALSE)
109 print("Written Results")
110
111 if ( !is.null(opt$reportdir) ) {
112 save(dxd, resSorted, file = file.path(opt$reportdir,"DEXSeq_analysis.RData"))
113 save.image()
114 DEXSeqHTML(res, path=opt$reportdir, FDR=opt$fdr, color=c("#B7FEA0", "#FF8F43", "#637EE9", "#FF0000", "#F1E7A1", "#C3EEE7","#CEAEFF", "#EDC3C5", "#AAA8AA"))
115 unlink(file.path(opt$reportdir,"DEXSeq_analysis.RData"))
116 }
117 sessionInfo()