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