annotate withinvariation-26603602a823/mixomics_multilevel.r @ 0:5086ad0c0992 draft default tip

Uploaded v0.4
author yguitton
date Fri, 05 May 2017 05:04:36 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
1 #!/usr/bin/env Rscript
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
2
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
3 ###############################################################################
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
4 #
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
5 # mixOmics multilevel function
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
6 #
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
7 # This script is written specifically for the mixOmics web-interface
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
8 # using the Galaxy system.
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
9 #
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
10 # R-Package: mixOmics
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
11 #
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
12 # Version: 1.2.3
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
13 #
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
14 # Author (wrapper): Xin-Yi Chua (xinyi.chua@qfab.org)
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
15 # Author (mixOmics.multilevel): Benoit Liquet, Kim-Anh Le Cao
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
16 # Author (warpper & .r adaptation for workflow4metabolomics.org): Yann GUITTON
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
17 #
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
18 # Expected parameters from the commandline
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
19 # input files:
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
20 # dataMatrix
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
21 # sampleMetadata
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
22 # params:
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
23 # respL (respL for one level & respL1 & respL2 for 2 levels)
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
24 # trans (need log2 or log10 transformation made before withinVar)
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
25 # scaling
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
26 # centering
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
27 # output files:
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
28 # dataMatrix_out (after withinVariation correction )
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
29 # result (Robject)
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
30 ################################################################################
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
31
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
32 #Redirect all stdout to the log file
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
33 log_file=file("multilevel.log", open = "wt")
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
34 sink(log_file)
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
35 sink(log_file, type = "output")
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
36
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
37 #remove rgl warning
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
38 options(rgl.useNULL = TRUE)
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
39
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
40 # ----- PACKAGE -----
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
41 cat("\tPACKAGE INFO\n")
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
42
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
43 pkgs=c("mixOmics","batch","pcaMethods")
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
44 for(pkg in pkgs) {
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
45 suppressPackageStartupMessages( stopifnot( library(pkg, quietly=TRUE, logical.return=TRUE, character.only=TRUE)))
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
46 cat(pkg,"\t",as.character(packageVersion(pkg)),"\n",sep="")
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
47 }
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
48
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
49
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
50 source_local <- function(fname) {
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
51 argv <- commandArgs(trailingOnly = FALSE)
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
52 base_dir <- dirname(substring(argv[grep("--file=", argv)], 8))
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
53 source(paste(base_dir, fname, sep="/"))
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
54 }
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
55
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
56
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
57
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
58 #load transformation function
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
59 source_local("transformation_script.R")
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
60 # source("transformation_script.R")
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
61 print("first loadings OK")
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
62
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
63
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
64 listArguments = parseCommandArgs(evaluate=FALSE) #interpretation of arguments given in command line as an R list of objects
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
65 print(listArguments)
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
66
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
67 ## libraries
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
68 ##----------
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
69
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
70 cat('\n\nRunning mixomics_multilevel.r\n');
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
71
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
72 options(warn=-1);
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
73 ##suppressPackageStartupMessages(library(mixOmics)); #not needed?
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
74
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
75
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
76 ## constants
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
77 ##----------
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
78
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
79 modNamC <- "Multilevel" ## module name
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
80
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
81 topEnvC <- environment()
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
82 flgC <- "\n"
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
83
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
84 ## functions
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
85 ##----------For manual input of function
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
86 ##--end function
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
87
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
88 flgF <- function(tesC,
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
89 envC = topEnvC,
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
90 txtC = NA) { ## management of warning and error messages
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
91
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
92 tesL <- eval(parse(text = tesC), envir = envC)
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
93
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
94 if(!tesL) {
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
95
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
96 sink(NULL)
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
97 stpTxtC <- ifelse(is.na(txtC),
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
98 paste0(tesC, " is FALSE"),
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
99 txtC)
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
100
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
101 stop(stpTxtC,
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
102 call. = FALSE)
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
103
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
104 }
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
105
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
106 } ## flgF
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
107
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
108
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
109 ## log file
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
110 ##---------
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
111
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
112
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
113 cat("\nStart of the '", modNamC, "' Galaxy module call: ",
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
114 format(Sys.time(), "%a %d %b %Y %X"), "\n", sep="")
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
115
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
116
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
117 ## arguments
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
118 ##----------
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
119
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
120 ## loading files and checks
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
121 xMN <- t(as.matrix(read.table(listArguments[["dataMatrix_in"]],
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
122 check.names = FALSE,
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
123 header = TRUE,
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
124 row.names = 1,
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
125 sep = "\t")))
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
126
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
127 samDF <- read.table(listArguments[["sampleMetadata_in"]],
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
128 check.names = FALSE,
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
129 header = TRUE,
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
130 row.names = 1,
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
131 sep = "\t")
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
132 flgF("identical(rownames(xMN), rownames(samDF))", txtC = "Sample names (or number) in the data matrix (first row) and sample metadata (first column) are not identical; use the 'Check Format' module in the 'Quality Control' section")
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
133
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
134 ##Here Add transformation scripts if trans<>none
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
135 if (listArguments[["transfo"]]=="go"){
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
136 cat("\n Start transformation with trans=",listArguments[["trans"]]," scale=",listArguments[["scale"]]," center=",listArguments[["center"]],"\n", sep="")
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
137 if (listArguments[["trans"]]!="none"){
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
138 metC <- listArguments[["trans"]]
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
139 xMN <- transformF(datMN = xMN, ## dataMatrix
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
140 metC = metC) ## transformation method
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
141 }
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
142 if (listArguments[["center"]]=="true"){
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
143 listArguments[["center"]]<-TRUE
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
144 }else{
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
145 listArguments[["center"]]<-FALSE
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
146 }
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
147
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
148 xMN<-prep(xMN, scale=listArguments[["scale"]],center=listArguments[["center"]])
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
149 }
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
150
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
151
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
152 ##end tranformation
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
153
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
154 if (listArguments[["respL2"]]!="NULL"){
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
155 cat("\n\nMultilevel (two levels)\n");
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
156 flgF("((listArguments[['respL1']] %in% colnames(samDF)) || (listArguments[['respL2']] %in% colnames(samDF)))", txtC = paste("Level argument (",listArguments[['respL2']]," ,",listArguments[['respL1']], ") must be one of the column names (first row) of your sample metadata", sep = ""))
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
157
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
158 tryCatch({
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
159 result <- withinVariation(xMN, design=samDF[,c(listArguments[["repmeasure"]],listArguments[["respL1"]],listArguments[["respL2"]])]);
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
160 }, error = function(err) {
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
161 stop(paste("There was an error when trying to run the Multilevel (two levels) function.\n\n",err));
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
162 });
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
163 } else {
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
164 cat("\n\nMultilevel (one level)\n");
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
165 flgF("(listArguments[['respL']] %in% colnames(samDF))", txtC = paste("Level argument (",listArguments[['respL']],") must be one of the column names (first row) of your sample metadata", sep = ""))
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
166
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
167 tryCatch({
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
168 result <- withinVariation(xMN, design=samDF[,c(listArguments[["repmeasure"]], listArguments[["respL"]])]);
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
169 }, error = function(err) {
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
170 stop(paste("There was an error when trying to run the Multilevel (one level) function.\n\n",err));
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
171 });
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
172 }
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
173
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
174
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
175 ##saving
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
176
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
177 if (exists("result")) {
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
178 ## writing output files
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
179 cat("\n\nWriting output files\n\n");
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
180 ## transpose matrix
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
181
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
182 datDF <- cbind.data.frame(dataMatrix = colnames(xMN),
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
183 as.data.frame(t(result)))
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
184 write.table(datDF,
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
185 file = "dataMatrix_out.tsv",
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
186 quote = FALSE,
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
187 row.names = FALSE,
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
188 sep = "\t")
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
189
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
190 tryCatch({
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
191 save(result, file="multilevel.RData");
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
192 }, warning = function(w) {
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
193 print(paste("Warning: ", w));
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
194 }, error = function(err) {
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
195 stop(paste("ERROR saving result RData object:", err));
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
196 });
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
197 }
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
198
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
199 ## ending
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
200 ##-------
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
201
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
202 cat("\nEnd of the '", modNamC, "' Galaxy module call: ",
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
203 format(Sys.time(), "%a %d %b %Y %X"), "\n", sep = "")
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
204
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
205 sink()
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
206
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
207 # options(stringsAsFactors = strAsFacL)
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
208
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
209
5086ad0c0992 Uploaded v0.4
yguitton
parents:
diff changeset
210 rm(list = ls())