view 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 source

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")
}