diff --git a/tools/gsc_center_scale/.shed.yml b/tools/gsc_center_scale/.shed.yml index fc9483be8..9843dc774 100644 --- a/tools/gsc_center_scale/.shed.yml +++ b/tools/gsc_center_scale/.shed.yml @@ -7,6 +7,7 @@ long_description: | transcriptomic data, or any type of numerical data categories: - Statistics + - Single Cell homepage_url: http://artbio.fr remote_repository_url: https://github.com/ARTbio/tools-artbio/tree/main/tools/gsc_center_scale toolshed: diff --git a/tools/gsc_center_scale/center_scale.R b/tools/gsc_center_scale/center_scale.R index e3d90ac47..bea148455 100644 --- a/tools/gsc_center_scale/center_scale.R +++ b/tools/gsc_center_scale/center_scale.R @@ -1,8 +1,9 @@ -options(show.error.messages = FALSE, - error = function() { - cat(geterrmessage(), file = stderr()) - q("no", 1, FALSE) - } +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() @@ -10,86 +11,91 @@ 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, + 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' ]" - ) + ), + 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))) + 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)) + args = commandArgs(trailingOnly = TRUE) +) data <- read.delim( - opt$data, - check.names = FALSE, - header = TRUE, - row.names = 1, - sep = "\t" + 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) - } + 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)) + 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" + cbind(gene = rownames(data_transformed), data_transformed), + opt$output, + col.names = TRUE, + row.names = FALSE, + quote = FALSE, + sep = "\t" ) diff --git a/tools/gsc_center_scale/center_scale.xml b/tools/gsc_center_scale/center_scale.xml index 2bd1dbc58..e243a819e 100644 --- a/tools/gsc_center_scale/center_scale.xml +++ b/tools/gsc_center_scale/center_scale.xml @@ -1,5 +1,8 @@ - + + + galaxy_single_cell_suite + r-optparse