Mercurial > repos > artbio > gsc_center_scale
view center_scale.R @ 2:163befe5f05b draft
planemo upload for repository https://github.com/ARTbio/tools-artbio/tree/main/tools/gsc_center_scale commit 41ba5435a8ad12c1fe0703a9ce44b759003f3f73
author | artbio |
---|---|
date | Sun, 15 Oct 2023 16:16:16 +0000 |
parents | a96cc346819c |
children | b7daf62bde65 |
line wrap: on
line source
options(show.error.messages = FALSE, error = function() { cat(geterrmessage(), file = stderr()) q("no", 1, FALSE) } ) loc <- Sys.setlocale("LC_MESSAGES", "en_US.UTF-8") warnings() library(optparse) # Arguments option_list <- list( make_option( "--data", default = NA, type = "character", help = "Input file that contains values to transform. Must be tabular separated, with columns and row names, variables in rows, observations in columns [default : '%default' ]" ), make_option( "--center", default = TRUE, type = "logical", help = "center data to the mean [default : '%default' ]" ), make_option( "--scale", default = TRUE, type = "logical", help = "scale data to standard deviation [default : '%default' ]" ), make_option( "--factor", default = "", type = "character", help = "A two-column observations|factor_levels table, to group observations to be transformed by levels [default : '%default' ]" ), make_option( "--output", default = "res.tab", type = "character", help = "Table of transformed values [default : '%default' ]" ) ) transform <- function(df, center = TRUE, scale = TRUE) { transfo <- scale(t(df), center = center, scale = scale ) return(as.data.frame(t(transfo))) } opt <- parse_args(OptionParser(option_list = option_list), args = commandArgs(trailingOnly = TRUE)) data <- read.delim( opt$data, check.names = FALSE, header = TRUE, row.names = 1, sep = "\t" ) if (opt$factor != "") { data_factor <- read.delim( opt$factor, check.names = FALSE, header = TRUE, sep = "\t", stringsAsFactors = TRUE ) colnames(data_factor) <- c("cellid", "level") data_transformed <- data.frame(row.names = rownames(data)) for (group in levels(data_factor$level)) { subcells <- as.data.frame(subset(data_factor, level == group, select = cellid)) subdata <- as.data.frame(subset(data, select = as.vector(subcells$cellid))) subdata_transformed <- transform(subdata, center = as.logical(opt$center), scale = as.logical(opt$scale)) data_transformed <- cbind(data_transformed, subdata_transformed) } } else { data_transformed <- transform(data, center = as.logical(opt$center), scale = as.logical(opt$scale)) } write.table( cbind(gene = rownames(data_transformed), data_transformed), opt$output, col.names = TRUE, row.names = FALSE, quote = FALSE, sep = "\t" )