Mercurial > repos > ethevenot > univariate
view tests/univariate_tests.R @ 1:fdefbc780d2e draft
planemo upload for repository https://github.com/workflow4metabolomics/univariate.git commit 59a3d6b0634a8bbe682d7b755bbb3735c07548dc
author | ethevenot |
---|---|
date | Sat, 30 Jul 2016 12:38:02 -0400 |
parents | ef64d3752050 |
children |
line wrap: on
line source
library(RUnit) wrapperF <- function(argVc) { source("../univariate_script.R") #### Start_of_testing_code <- function() {} ##------------------------------ ## Initializing ##------------------------------ ## options ##-------- strAsFacL <- options()$stringsAsFactors options(stringsAsFactors = FALSE) ## packages ##--------- library(PMCMR) ## constants ##---------- modNamC <- "Univariate" ## module name topEnvC <- environment() flagC <- "\n" ## functions ##---------- flgF <- function(tesC, envC = topEnvC, txtC = NA) { ## management of warning and error messages tesL <- eval(parse(text = tesC), envir = envC) if(!tesL) { sink(NULL) stpTxtC <- ifelse(is.na(txtC), paste0(tesC, " is FALSE"), txtC) stop(stpTxtC, call. = FALSE) } } ## flgF ## log file ##--------- sink(argVc["information"]) cat("\nStart of the '", modNamC, "' Galaxy module call: ", format(Sys.time(), "%a %d %b %Y %X"), "\n", sep="") ## loading ##-------- datMN <- t(as.matrix(read.table(argVc["dataMatrix_in"], check.names = FALSE, header = TRUE, row.names = 1, sep = "\t"))) samDF <- read.table(argVc["sampleMetadata_in"], check.names = FALSE, header = TRUE, row.names = 1, sep = "\t") varDF <- read.table(argVc["variableMetadata_in"], check.names = FALSE, header = TRUE, row.names = 1, sep = "\t") tesC <- argVc["tesC"] ## checking ##--------- flgF("identical(rownames(datMN), rownames(samDF))", txtC = "Column names of the dataMatrix are not identical to the row names of the sampleMetadata; check your data with the 'Check Format' module in the 'Quality Control' section") flgF("identical(colnames(datMN), rownames(varDF))", txtC = "Row names of the dataMatrix are not identical to the row names of the variableMetadata; check your data with the 'Check Format' module in the 'Quality Control' section") flgF("argVc['facC'] %in% colnames(samDF)", txtC = paste0("Required factor of interest '", argVc['facC'], "' could not be found in the column names of the sampleMetadata")) flgF("mode(samDF[, argVc['facC']]) %in% c('character', 'numeric')", txtC = paste0("The '", argVc['facC'], "' column of the sampleMetadata should contain either number only, or character only")) flgF("!(tesC %in% c('ttest', 'wilcoxon')) || (mode(samDF[, argVc['facC']]) == 'character' && length(unique(samDF[, argVc['facC']])) == 2)", txtC = paste0("For 'ttest' and 'wilcoxon', the chosen factor column ('", argVc['facC'], "') of the sampleMetadata should contain characters with only two different classes")) flgF("!(tesC %in% c('anova', 'kruskal')) || (mode(samDF[, argVc['facC']]) == 'character' && length(unique(samDF[, argVc['facC']])) > 2)", txtC = paste0("For 'anova' and 'kruskal', the chosen factor column ('", argVc['facC'], "') of the sampleMetadata should contain characters with at least three different classes")) flgF("!(tesC %in% c('pearson', 'spearman')) || mode(samDF[, argVc['facC']]) == 'numeric'", txtC = paste0("For 'pearson' and 'spearman', the chosen factor column ('", argVc['facC'], "') of the sampleMetadata should contain numbers only")) flgF("argVc['adjC'] %in% c('holm', 'hochberg', 'hommel', 'bonferroni', 'BH', 'BY', 'fdr', 'none')") flgF("0 <= as.numeric(argVc['thrN']) && as.numeric(argVc['thrN']) <= 1", txtC = "(corrected) p-value threshold must be between 0 and 1") ##------------------------------ ## Computation ##------------------------------ varDF <- univariateF(datMN = datMN, samDF = samDF, varDF = varDF, facC = argVc["facC"], tesC = tesC, adjC = argVc["adjC"], thrN = as.numeric(argVc["thrN"])) ##------------------------------ ## Ending ##------------------------------ ## saving ##-------- varDF <- cbind.data.frame(variableMetadata = rownames(varDF), varDF) write.table(varDF, file = argVc["variableMetadata_out"], quote = FALSE, row.names = FALSE, sep = "\t") ## closing ##-------- cat("\nEnd of '", modNamC, "' Galaxy module call: ", as.character(Sys.time()), "\n", sep = "") sink() options(stringsAsFactors = strAsFacL) #### End_of_testing_code <- function() {} return(list(varDF = varDF)) rm(list = ls()) } exaDirOutC <- "output" if(!file.exists(exaDirOutC)) stop("Please create an 'output' subfolder into the (current) 'tests' folder") tesArgLs <- list(input_kruskal = c(facC = "ageGroup", tesC = "kruskal", adjC = "fdr", thrN = "0.05", .chkC = "checkEqualsNumeric(outLs[['varDF']]['HMDB01032', 'ageGroup_kruskal_senior-experienced_pva'], 0.1231246, tolerance = 1e-6)"), example1_wilcoxDif = c(facC = "jour", tesC = "wilcoxon", adjC = "fdr", thrN = "0.05", .chkC = "checkEqualsNumeric(outLs[['varDF']]['MT3', 'jour_wilcoxon_J3-J10_dif'], 0.216480042, tolerance = 1e-8)"), example1_ttestFdr = c(facC = "jour", tesC = "ttest", adjC = "fdr", thrN = "0.05", .chkC = "checkEqualsNumeric(outLs[['varDF']]['MT3', 'jour_ttest_J3-J10_fdr'], 0.7605966, tolerance = 1e-6)")) for(tesC in names(tesArgLs)) tesArgLs[[tesC]] <- c(tesArgLs[[tesC]], dataMatrix_in = file.path(unlist(strsplit(tesC, "_"))[1], "dataMatrix.tsv"), sampleMetadata_in = file.path(unlist(strsplit(tesC, "_"))[1], "sampleMetadata.tsv"), variableMetadata_in = file.path(unlist(strsplit(tesC, "_"))[1], "variableMetadata.tsv"), variableMetadata_out = file.path(exaDirOutC, "variableMetadata.tsv"), information = file.path(exaDirOutC, "information.txt")) for(tesC in names(tesArgLs)) { print(tesC) outLs <- wrapperF(tesArgLs[[tesC]]) if(".chkC" %in% names(tesArgLs[[tesC]])) stopifnot(eval(parse(text = tesArgLs[[tesC]][[".chkC"]]))) } message("Checks successfully completed")