Mercurial > repos > iuc > masigpro
view masigpro.R @ 4:402e0b9cfd87 draft default tip
"planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/masigpro commit 7dc16d5d4169a8fbfb3fad3b2212fd8b6d481f5f"
author | iuc |
---|---|
date | Sat, 27 Nov 2021 09:58:07 +0000 |
parents | db04ba860dab |
children |
line wrap: on
line source
#!/usr/bin/env Rscript # A command-line interface to maSigPro for use with Galaxy # written by Clemens Blank. # Thanks to Bjoern Gruening and Michael Love for their DESeq2 # wrapper as a basis to build upon. # setup R error handling to go to stderr error_foo <- function() { cat(geterrmessage(), file = stderr()); q("no", 1, F) } options(show.error.messages = F, error = error_foo) # we need that to not crash galaxy with an UTF8 error on German LC settings. loc <- Sys.setlocale("LC_MESSAGES", "en_US.UTF-8") suppressPackageStartupMessages({ library("maSigPro") library("optparse") library("mclust") }) # The following code fixes an error in the stepback function # of the maSigPro package. This code is hopefully temporary # and can be removed if the fix is included in a future # version. The stepback function in the maSigPro namespace # will be overwritten by the following function. stepback <- function(y = y, d = d, alfa = 0.05, family = gaussian(), epsilon=0.00001) { lm1 <- glm(y ~ ., data = d, family = family, epsilon = epsilon) result <- summary(lm1) max <- max(result$coefficients[, 4][-1], na.rm = TRUE) if (length(result$coefficients[, 4][-1]) == 1) { if (max > alfa) { max <- 0 lm1 <- glm(y ~ 1, family = family, epsilon = epsilon) } } while (max > alfa) { varout <- names(result$coefficients[, 4][-1])[result$coefficients[, 4][-1] == max][1] pos <- position(matrix = d, vari = varout) d <- d[, -pos] if (length(result$coefficients[, 4][-1]) == 2) { min <- min(result$coefficients[, 4][-1], na.rm = TRUE) lastname <- names(result$coefficients[, 4][-1])[result$coefficients[, 4][-1] == min] } if (is.null(dim(d))) { d <- as.data.frame(d) colnames(d) <- lastname } lm1 <- glm(y ~ ., data = d, family = family, epsilon = epsilon) result <- summary(lm1) max <- max(result$coefficients[, 4][-1], na.rm = TRUE) if (length(result$coefficients[, 4][-1]) == 1) { max <- result$coefficients[, 4][-1] if (max > alfa) { max <- 0 lm1 <- glm(y ~ 1, family = family, epsilon = epsilon) } } } return(lm1) } unlockBinding("stepback", as.environment("package:maSigPro")) assignInNamespace("stepback", stepback, ns = "maSigPro", envir = as.environment("package:maSigPro")) assign("stepback", stepback, as.environment("package:maSigPro")) lockBinding("stepback", as.environment("package:maSigPro")) # End of temporary code to fix stepback.R options(stringAsFactors = FALSE, useFancyQuotes = FALSE) args <- commandArgs(trailingOnly = TRUE) # specify our desired options in a list # by default OptionParser will add an help option equivalent to # make_option(c("-h", "--help"), action="store_true", default=FALSE, # help="Show this help message and exit") option_list <- list( make_option(c("-q", "--quiet"), action = "store_false", dest = "verbose", help = "Print little output"), make_option(c("-e", "--edesign"), type = "character"), make_option(c("-d", "--data"), type = "character"), make_option(c("-o", "--outfile"), type = "character"), make_option("--degree", type = "integer", default = 1), make_option("--time_col", type = "integer", default = 1), make_option("--repl_col", type = "integer", default = 2), make_option("--qvalue", type = "double", default = 0.05), make_option("--min_obs", type = "integer", default = 6), make_option("--step_method", type = "character", default = "backward"), make_option("--nvar_correction", type = "logical", default = FALSE), make_option("--alfa", type = "double", default = 0.05), make_option("--rsq", type = "double", default = 0.7), make_option("--vars", type = "character", default = "groups"), make_option("--significant_intercept", type = "character", default = "dummy"), make_option("--cluster_data", type = "integer", default = 1), make_option(c("-k", "--k"), type = "integer", default = 9), make_option("--print_cluster", type = "logical", default = FALSE), make_option("--cluster_method", type = "character", default = "hclust"), make_option("--distance", type = "character", default = "cor"), make_option("--agglo_method", type = "character", default = "ward.D"), make_option("--iter_max", type = "integer", default = 500), make_option("--color_mode", type = "character", default = "rainbow"), make_option("--show_fit", type = "logical", default = TRUE), make_option("--show_lines", type = "logical", default = TRUE), make_option("--cexlab", type = "double", default = 0.8), make_option("--legend", type = "logical", default = TRUE) ) # get command line options, if help option encountered print help and exit, # otherwise if options not found on command line then set defaults opt <- parse_args(OptionParser(option_list = option_list)) # enforce the following required arguments if (is.null(opt$edesign)) { cat("'edesign' is required\n") q(status = 1) } if (is.null(opt$data)) { cat("'data' is required\n") q(status = 1) } if (is.null(opt$outfile)) { cat("'outfile' is required\n") q(status = 1) } verbose <- if (is.null(opt$quiet)) { TRUE } else { FALSE } edesign <- as.matrix(read.table(opt$edesign, header = TRUE, row.names = 1)) data <- read.table(opt$data, header = TRUE, check.names = FALSE) results <- maSigPro(data, edesign, degree = opt$degree, time.col = opt$time_col, repl.col = opt$repl_col, Q = opt$qvalue, min.obs = opt$min_obs, step.method = opt$step_method, nvar.correction = opt$nvar_correction, alfa = opt$alfa, rsq = opt$rsq, vars = opt$vars, significant.intercept = opt$significant_intercept, cluster.data = opt$cluster_data, k = opt$k, cluster.method = opt$cluster_method, distance = opt$distance, agglo.method = opt$agglo_method, iter.max = opt$iter_max, color.mode = opt$color_mode, show.fit = opt$show_fit, show.lines = opt$show_lines, cexlab = opt$cexlab, legend = opt$legend) if (opt$print_cluster) { for (i in seq_len(length(results$sig.genes))) { colname <- paste(names(results$sig.genes)[i], "cluster", sep = "_") results$summary[colname] <- "" results$summary[[colname]][seq_len(length(results$sig.genes[[i]]$sig.profiles$`cluster$cut`))] <- results$sig.genes[[i]]$sig.profiles$`cluster$cut` } } filename <- opt$outfile write.table((results$summary), file = filename, sep = "\t", quote = FALSE, row.names = FALSE, col.names = TRUE) cat("Session information:\n\n") sessionInfo()