Mercurial > repos > recetox > waveica
comparison waveica_wrapper.R @ 4:8b55efc7d117 draft
"planemo upload for repository https://github.com/RECETOX/galaxytools/tree/master/tools/waveica commit aa8206a01efc1813f2586584782f28a73a17fe86"
| author | recetox |
|---|---|
| date | Mon, 10 Jan 2022 16:01:35 +0000 |
| parents | d08deef1eb44 |
| children | cf3f2f964d80 |
comparison
equal
deleted
inserted
replaced
| 3:e3726251a055 | 4:8b55efc7d117 |
|---|---|
| 9 | 9 |
| 10 # get input from the Galaxy, preprocess data | 10 # get input from the Galaxy, preprocess data |
| 11 data <- read.csv(data, header = TRUE) | 11 data <- read.csv(data, header = TRUE) |
| 12 | 12 |
| 13 required_columns <- c("sampleName", "class", "sampleType", "injectionOrder", "batch") | 13 required_columns <- c("sampleName", "class", "sampleType", "injectionOrder", "batch") |
| 14 if (anyNA(data)) { | 14 verify_input_dataframe(data, required_columns) |
| 15 stop("Error: dataframe cannot contain NULL values! | |
| 16 Make sure that your dataframe does not contain empty cells") | |
| 17 } else if (!all(required_columns %in% colnames(data))) { | |
| 18 stop("Error: missing metadata! | |
| 19 Make sure that the following columns are present in your dataframe: [sampleName, class, sampleType, injectionOrder, batch]") | |
| 20 } | |
| 21 | 15 |
| 22 # sort data by injection order | 16 data <- sort_by_injection_order(data) |
| 23 data <- data[order(data[, "batch"], | |
| 24 data[, "injectionOrder"], | |
| 25 decreasing = FALSE | |
| 26 ), ] | |
| 27 | 17 |
| 28 # separate data into features, batch and group | 18 # separate data into features, batch and group |
| 29 feature_columns <- colnames(data)[!colnames(data) %in% required_columns] | 19 feature_columns <- colnames(data)[!colnames(data) %in% required_columns] |
| 30 features <- data[, feature_columns] | 20 features <- data[, feature_columns] |
| 31 group <- enumerate_groups(as.character(data$sampleType)) | 21 group <- enumerate_groups(as.character(data$sampleType)) |
| 32 batch <- data$batch | 22 batch <- data$batch |
| 33 | 23 |
| 34 # run WaveICA | 24 # run WaveICA |
| 35 features <- WaveICA::WaveICA( | 25 features <- recetox.waveica::waveica( |
| 36 data = features, | 26 data = features, |
| 37 wf = get_wf(wavelet_filter, wavelet_length), | 27 wf = get_wf(wavelet_filter, wavelet_length), |
| 38 batch = batch, | 28 batch = batch, |
| 39 group = group, | 29 group = group, |
| 40 K = k, | 30 K = k, |
| 41 t = t, | 31 t = t, |
| 42 t2 = t2, | 32 t2 = t2, |
| 43 alpha = alpha | 33 alpha = alpha |
| 44 ) | 34 ) |
| 45 | 35 |
| 46 data[, feature_columns] <- features$data_wave | 36 data[, feature_columns] <- features |
| 47 | 37 |
| 48 # remove blanks from dataset | 38 # remove blanks from dataset |
| 49 if (exclude_blanks) { | 39 if (exclude_blanks) { |
| 50 data <- exclude_group(data, group) | 40 data <- exclude_group(data, group) |
| 51 } | 41 } |
| 52 | 42 |
| 53 return(data) | 43 return(data) |
| 44 } | |
| 45 | |
| 46 | |
| 47 waveica_singlebatch <- function(data, | |
| 48 wavelet_filter, | |
| 49 wavelet_length, | |
| 50 k, | |
| 51 alpha, | |
| 52 cutoff, | |
| 53 exclude_blanks) { | |
| 54 | |
| 55 # get input from the Galaxy, preprocess data | |
| 56 data <- read.csv(data, header = TRUE) | |
| 57 | |
| 58 required_columns <- c("sampleName", "class", "sampleType", "injectionOrder") | |
| 59 optional_columns <- c("batch") | |
| 60 verify_input_dataframe(data, required_columns) | |
| 61 | |
| 62 data <- sort_by_injection_order(data) | |
| 63 | |
| 64 feature_columns <- colnames(data)[!colnames(data) %in% c(required_columns, optional_columns)] | |
| 65 features <- data[, feature_columns] | |
| 66 injection_order <- data$injectionOrder | |
| 67 | |
| 68 # run WaveICA | |
| 69 features <- recetox.waveica::waveica_nonbatchwise( | |
| 70 data = features, | |
| 71 wf = get_wf(wavelet_filter, wavelet_length), | |
| 72 injection_order = injection_order, | |
| 73 K = k, | |
| 74 alpha = alpha, | |
| 75 cutoff = cutoff | |
| 76 ) | |
| 77 | |
| 78 data[, feature_columns] <- features | |
| 79 | |
| 80 # remove blanks from dataset | |
| 81 if (exclude_blanks) { | |
| 82 data <- exclude_group(data, group) | |
| 83 } | |
| 84 | |
| 85 return(data) | |
| 86 } | |
| 87 | |
| 88 | |
| 89 sort_by_injection_order <- function(data) { | |
| 90 if ("batch" %in% colnames(data)) { | |
| 91 data <- data[order(data[, "batch"], | |
| 92 data[, "injectionOrder"], | |
| 93 decreasing = FALSE | |
| 94 ), ] | |
| 95 } else { | |
| 96 data <- data[order(data[, "injectionOrder"], | |
| 97 decreasing = FALSE | |
| 98 ), ] | |
| 99 } | |
| 100 return(data) | |
| 101 } | |
| 102 | |
| 103 | |
| 104 verify_input_dataframe <- function(data, required_columns) { | |
| 105 if (anyNA(data)) { | |
| 106 stop("Error: dataframe cannot contain NULL values! | |
| 107 Make sure that your dataframe does not contain empty cells") | |
| 108 } else if (!all(required_columns %in% colnames(data))) { | |
| 109 stop("Error: missing metadata! | |
| 110 Make sure that the following columns are present in your dataframe: ", paste(required_columns, collapse = ", ")) | |
| 111 } | |
| 54 } | 112 } |
| 55 | 113 |
| 56 | 114 |
| 57 # Match group labels with [blank/sample/qc] and enumerate them | 115 # Match group labels with [blank/sample/qc] and enumerate them |
| 58 enumerate_groups <- function(group) { | 116 enumerate_groups <- function(group) { |
