# avearrays.R
avearrays <- function(x,ID=NULL,weights=NULL) UseMethod("avearrays")
# 24 Sept 2010
avearrays.default <- function(x,ID=colnames(x),weights=NULL)
# Average over technical replicate columns, for matrices
# Gordon Smyth
# Created 24 Sept 2010. Last modified 13 Aug 2015.
{
if(is.null(x)) return(NULL)
if(is.vector(x)) stop("x must be a matrix")
x <- as.matrix(x)
if(is.null(ID)) stop("No sample IDs")
ID <- as.character(ID)
if(mode(x)=="character") {
d <- duplicated(ID)
if(!any(d)) return(x)
y <- x[,!d,drop=FALSE]
return(y)
}
ID <- factor(ID,levels=unique(ID))
if(is.null(weights)) {
y <- t(rowsum(t(x),ID,reorder=FALSE,na.rm=TRUE))
n <- t(rowsum(t(1L-is.na(x)),ID,reorder=FALSE,na.rm=TRUE))
y <- y/n
} else {
design <- model.matrix(~0+ID)
y <- lmFit(x,design,weights=weights)$coefficients
}
y
}
avearrays.MAList <- function(x,ID=colnames(x),weights=x$weights)
# Average over technical replicate columns for MAList objects
# Gordon Smyth
# 24 Sept 2010. Last modified 24 Sep 2010.
{
ID <- as.character(ID)
d <- duplicated(ID)
if(!any(d)) return(x)
y <- x[,!d]
y$M <- avearrays(x$M,ID,weights=weights)
y$A <- avearrays(x$A,ID,weights=weights)
y$weights <- avearrays(x$weights,ID,weights=weights)
other <- names(x$other)
for (a in other) y$other[[a]] <- avearrays(x$other[[a]],ID=ID,weights=weights)
y
}
avearrays.EList <- function(x,ID=colnames(x),weights=x$weights)
# Average over irregular replicate columns for EList objects
# Gordon Smyth
# 24 Sept 2010. Last modified 27 Oct 2010.
{
d <- duplicated(ID)
if(!any(d)) return(x)
y <- x[,!d]
y$E <- avearrays(x$E,ID,weights=weights)
y$weights <- avearrays(x$weights,ID,weights=weights)
other <- names(x$other)
for (a in other) y$other[[a]] <- avearrays(x$other[[a]],ID=ID,weights=weights)
y
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.