view charts.r @ 0:a87a3773d8ed draft

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/charts/ commit 87080d49913cfd40a77eda7e5834ac9c4bc30b0b
author iuc
date Fri, 09 Mar 2018 08:23:08 -0500
parents
children 344ac3ca7557
line wrap: on
line source

#!/usr/bin/Rscript

# load getopt library
library('getopt');

# convert multi parameter string (i.e. key1: value, key2: value, ...) to object
split <- function(argument){
    # process parameter string
    options <- list()
    list <- gsub("\\s","", argument)
    list <- strsplit(list, ",")
    if (length(list) > 0) {
        list <- list[[1]]
        for (entry in list) {
            pair <- strsplit(entry, ":")
            if (length(pair) > 0) {
                pair <- pair[[1]]
                if (length(pair) == 2) {
                    options[[pair[1]]] <- pair[2]
                }
            }
        }
    }
    return(options)
}

# get options, using the spec as defined by the enclosed list.
spec = matrix(c(
    'workdir',  'w', 1, 'character', 'Work directory',
    'module',   'm', 1, 'character', 'Module name',
    'input',    'i', 1, 'character', 'Input tabular file',
    'columns',  'c', 1, 'character', 'Columns string',
    'settings', 's', 1, 'character', 'Settings string',
    'output',   'o', 1, 'character', 'Output tabular file',
    'help',     'h', 0, '',          'Help',
    'verbose',  'v', 0, '',          'Verbose'
), byrow=TRUE, ncol=5);
opt = getopt(spec);

# show help
if ( !is.null(opt$help) ||
    is.null(opt$module) ||
    is.null(opt$input) ||
    is.null(opt$columns) ||
    is.null(opt$output)) {
    cat(getopt(spec, usage=TRUE))
    q(status=1);
}

# read columns/settings
columns = split(opt$columns)
settings = split(opt$settings)

# read table
table <- read.table(opt$input, comment.char='#', fill=TRUE)

# identify module file
module_file = paste(opt$workdir, opt$module, '.r', sep='')

# source module
source(module_file)

# run module
l = wrapper (table, columns, settings)

# header
header_title <- '# title - Chart Utilities (charts)'
header_date <- paste('# date -', Sys.time(), sep=' ')
header_module <- paste('# module -', opt$module, sep=' ')
header_settings <- paste('# settings -', opt$settings, sep=' ')
header_columns <- paste('# columns -', opt$columns, sep=' ')

# check result
if (length(l) > 0) {
    # print details
    if (!is.null(opt$verbose)) {
        print ('Columns:')
        print (columns)
        print ('Settings:')
        print (settings)
        print ('Result:')
        print (l)
    }

    # create output file
    output <- file(opt$output, open='wt')
    
    # write header
    writeLines('#', output)
    writeLines(header_title, output)
    writeLines(header_date, output)
    writeLines(header_module, output)
    writeLines(header_settings, output)
    writeLines(header_columns, output)
    writeLines('#', output)
    
    # pad columns
    rows <- max(unlist(lapply(l, length)))
    padded <- lapply(l, function(col) {
        length(col) = rows;
        col
    })
    
    # write table
    write.table(padded, file=output, row.names=FALSE, col.names = FALSE, quote=FALSE, sep='\t')
    
    # close file
    close(output)
} else {
    # print details
    print ('Columns:')
    print (columns)
    print ('Settings:')
    print (settings)
    print ('No output generated.')
}