Mercurial > repos > artbio > gsc_center_scale
diff center_scale.R @ 0:bcbd7179d8ec draft
planemo upload for repository https://github.com/ARTbio/tools-artbio/tree/master/tools/gsc_center_scale commit b839b440f0760ff9cd75969d418432702947a669
author | artbio |
---|---|
date | Thu, 11 Jul 2019 13:31:20 -0400 |
parents | |
children | a96cc346819c |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/center_scale.R Thu Jul 11 13:31:20 2019 -0400 @@ -0,0 +1,101 @@ +options( show.error.messages=F, + error = function () { cat( geterrmessage(), file=stderr() ); q( "no", 1, F ) } ) +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=center + ) + return(as.data.frame(t(transfo))) +} + +opt = parse_args(OptionParser(option_list = option_list), + args = commandArgs(trailingOnly = TRUE)) + +data = read.table( + opt$data, + check.names = FALSE, + header = TRUE, + row.names = 1, + sep = '\t' +) + +if (opt$factor != '') { + data.factor = read.table( + opt$factor, + check.names = FALSE, + header = TRUE, + sep = '\t' + ) + colnames(data.factor) <- c("cellid", "level") + data.transformed <- data.frame(row.names=rownames(data), stringsAsFactors=FALSE) + 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=subcells$cellid)) + subdata.transformed <- transform(subdata, center=opt$center, scale=opt$scale) + data.transformed <- cbind(data.transformed, subdata.transformed) + } +} else { + data.transformed <- transform(data, center=opt$center, scale=opt$scale) +} + + +write.table( + cbind(gene=rownames(data.transformed), data.transformed), + opt$output, + col.names = TRUE, + row.names = FALSE, + quote = F, + sep = "\t" +) + + + + + + + + + + + +