Skip to content
Snippets Groups Projects
mergecounts.wdl 1.45 KiB
Newer Older
Ruben Vorderman's avatar
Ruben Vorderman committed
version 1.0
Cats's avatar
Cats committed

Ruben Vorderman's avatar
Ruben Vorderman committed
task MergeCounts {
    input {
        String? preCommand

        Array[File] inputFiles
        String outputFile
        Int featureColumn
        Int valueColumn
        Boolean inputHasHeader
    }
Cats's avatar
Cats committed
    # Based on a script by Szymon Kielbasa/Ioannis Moustakas
    command <<<
Cats's avatar
Cats committed
        set -e -o pipefail
Ruben Vorderman's avatar
Ruben Vorderman committed
        mkdir -p ~{sub(outputFile, basename(outputFile) + "$", "")}
        ~{preCommand}
Cats's avatar
Cats committed
        R --no-save <<CODE
Cats's avatar
Cats committed
            library(dplyr)
            library(reshape2)

Ruben Vorderman's avatar
Ruben Vorderman committed
            listOfFiles <- c("~{sep='", "' inputFiles}")
Cats's avatar
Cats committed

Ruben Vorderman's avatar
Ruben Vorderman committed
            valueI <- ~{valueColumn}
            featureI <- ~{featureColumn}
            header <- ~{true="TRUE" false="FALSE" inputHasHeader}
Cats's avatar
Cats committed

Cats's avatar
Cats committed
            d <- do.call(rbind, lapply(listOfFiles, function(file){
Cats's avatar
Cats committed
                d <- read.table(file, sep="\t", header=header, comment.char="#")
Cats's avatar
Cats committed

                splitPath <- strsplit(file, "/")[[1]]
                colnames(d)[valueI] <- sub("\\\.[^\\\.]*$", "",
                    splitPath[length(splitPath)])
                colnames(d)[featureI] <- "feature"

                d <- d %>% melt(id.vars=featureI, variable.name="sample", value.name="count")
Cats's avatar
Cats committed
            }))

Cats's avatar
Cats committed
            d <- d %>% dcast(feature ~ sample, value.var="count")
Ruben Vorderman's avatar
Ruben Vorderman committed
            write.table(d, file="~{outputFile}", sep="\t", quote=FALSE, row.names=FALSE)
Cats's avatar
Cats committed
        CODE
    >>>
Cats's avatar
Cats committed

    output {
        File mergedCounts = outputFile
    }
Cats's avatar
Cats committed

    runtime {
        memory: 4 + (2*length(inputFiles))
    }
Cats's avatar
Cats committed
}