diff waveica_wrapper.R @ 0:2461d20911c9 draft

"planemo upload for repository https://github.com/RECETOX/galaxytools/tree/master/tools/waveica commit 91376ea7a6736351b0cc086ca1bc6c553fdcda97"
author recetox
date Thu, 18 Mar 2021 15:53:38 +0000
parents
children 2bcfd5b450bb
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/waveica_wrapper.R	Thu Mar 18 15:53:38 2021 +0000
@@ -0,0 +1,87 @@
+waveica <- function(
+    data,
+    wavelet_filter,
+    wavelet_length,
+    k,
+    t,
+    t2,
+    alpha,
+    exclude_blanks
+) {
+
+    # get input from the Galaxy, preprocess data
+    data <- read.csv(data, header = TRUE, row.names = "sample_name")
+    data <- preprocess_data(data)
+
+    # remove blanks from dataset
+    if (exclude_blanks) {
+        data <- exclude_group(data)
+    }
+
+    # separate data into features, batch and group
+    features <- data[, -c(1:4)]
+    group <- as.numeric(data$class)
+    batch <- data$batch
+
+    # run WaveICA
+    normalized_data <- WaveICA::WaveICA(
+        data = features,
+        wf = get_wf(wavelet_filter, wavelet_length),
+        batch = batch,
+        group = group,
+        K = k,
+        t = t,
+        t2 = t2,
+        alpha = alpha
+        )
+
+    return(normalized_data)
+}
+
+
+# Sort data, set numerical values for groups
+preprocess_data <- function(data) {
+    # sort data by injection order
+    data <- data[order(data$injectionOrder, decreasing = FALSE), ]
+
+    data$class[data$class == "blank"] <- 0
+    data$class[data$class == "sample"] <- 1
+    data$class[data$class == "QC"] <- 2
+
+    return(data)
+}
+
+
+# Create appropriate input for R wavelets function
+get_wf <- function(wavelet_filter, wavelet_length) {
+    wf <- paste(wavelet_filter, wavelet_length, sep = "")
+
+    # exception to the wavelet function
+    if (wf == "d2") {
+        wf <- "haar"
+        }
+
+    return(wf)
+}
+
+
+# Exclude blanks from a dataframe
+exclude_group <- function(data) {
+    row_idx_to_exclude <- which(data$class %in% 0)
+    if (length(row_idx_to_exclude) > 1) {
+        data_without_blanks <- data[-c(row_idx_to_exclude), ]
+        msg <- paste("Blank samples have been excluded from the dataframe.\n")
+        cat(msg)
+        return(data_without_blanks)
+        }
+    else {
+        return(data)
+    }
+}
+
+
+# Store output of WaveICA in a tsv file
+store_data <- function(normalized_data, output) {
+    write.table(normalized_data, file = output, sep = "\t", col.names = NA)
+    cat("Normalization has been completed.\n")
+}