#' Pool coverage from multiple samples
#'
#' Averages the coverage of a list of samples.
#'
#'
#' @param all.data List of normals, read with \code{\link{readCoverageFile}}.
#' @param remove.chrs Remove these chromosomes from the pool.
#' @param w \code{numeric(length(all.data))} vector of weights. If \code{NULL},
#' weight all samples equally.
#' @return A \code{data.frame} with the averaged coverage over all normals.
#' @author Markus Riester
#' @seealso \code{\link{readCoverageFile}}
#' @examples
#'
#' normal.coverage.file <- system.file("extdata", "example_normal.txt.gz",
#' package = "PureCN")
#' normal2.coverage.file <- system.file("extdata", "example_normal2.txt.gz",
#' package = "PureCN")
#' normal.coverage.files <- c(normal.coverage.file, normal2.coverage.file)
#' pool <- poolCoverage(lapply(normal.coverage.files, readCoverageFile),
#' remove.chrs = c("chrX", "chrY"))
#'
#' @export poolCoverage
poolCoverage <- function(all.data, remove.chrs=c(), w = NULL) {
pool <- all.data[[1]]
if (length(all.data) == 1) {
return(.removeChr(pool, remove.chrs))
}
if (is.null(w)) {
w <- rep(1, length(all.data))
} else if (length(w) != length(all.data)) {
.stopUserError("all.data and w have different lengths.")
}
pool$coverage <- 0
pool$counts <- 0
for (i in seq_along(all.data)) {
pool$coverage <- pool$coverage + (w[i] * all.data[[i]]$coverage)
pool$counts <- pool$counts + (w[i] * all.data[[i]]$counts)
}
pool <- .addAverageCoverage(pool)
return(.removeChr(pool, remove.chrs))
}
.removeChr <- function(pool, remove.chrs = c()) {
idx <- seqnames(pool) %in% remove.chrs
if (sum(idx)) {
pool[idx]$coverage <- NA
pool[idx]$average.coverage <- NA
}
pool
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.