Nothing
#' @title plotExpr Function to generate a boxplot (expression) for a
#' SummarizedExperiment object based on the replicate data.
#' @description This function generates a boxplot of FPKM expression
#' values from the supplied object. FPKM values are averaged
#' across replicates and partitioned among groups of loci as specified
#' in a selected column from the annotation slot of the provided
#' object.
#' @usage plotExpr(se, groupings= NULL, mode_mean=TRUE,
#' treatment=levels(colData(se)$Treatment),
#' LOG2=TRUE, clusterby_grouping=TRUE, ...)
#' @param se A SummarizedExp object containing FPKM values and at least
#' one annotation column.
#' @param groupings Specifies which column in the dataframe of the
#' annotation slot that will be used to group loci in the boxplot.
#' Can provide either a character value matching the column name,
#' or a single numerical value used as an index of dataframe columns.
#' @param mode_mean Logical. If TRUE then FPKM values are averaged by
#' mean across replicates within treatment. If FALSE, values are
#' averaged by median.
#' @param treatment A character vector indicating which treatments
#' (i.e. levels in the replicates slot vector) will be plotted.
#' Order matters, and controls the ordering of treatments represented
#' in the boxplot.
#' @param LOG2 Logical. If TRUE then average FPKM values are Log2
#' transformed.
#' @param clusterby_grouping Logical. If TRUE then boxplots are arranged
#' by locus annotation grouping. If FALSE they are arranged by treatment
#' levels, as indicated in the treatment argument.
#' @param ... Additional named arguments and graphical parameters passed
#' to the boxplot function.
#' @details This function generates boxplots to visualize the distribution
#' of FPKM expression values provided in an object, arranged by
#' selected treatments and locus annotations. FPKM values are averaged
#' (mean or median) within selected treatments, to provide a single
#' expression value per locus per treatment. Loci are partitioned
#' into groupings based on a specified column in the dataframe of
#' annotations slot of the object. Thus a box is drawn for
#' each grouping of loci for each treatment indicated. Desired treatments
#' and their ordering are specified by the treatment argument. Groupings
#' are arranged by sort order of the annotation column indicated, and can
#' thus be controlled by providing a factor with a pre-specified level order.
#' By default (clusterby_grouping = TRUE), boxes are arranged by annotation
#' group first, and then by treatment, but setting this option to FALSE
#' arranges boxes by treatment and then annotation group. This function uses
#' the base graphics boxplot function to generate the plot, so can accept
#' all relevant graphical arguments for customizing the figure;
#' see boxplot for details.
#' @examples
#' data(hmel.se)
#' plotExpr(se, groupings = "annotation.ZA", treatment = 'Male' )
#' @return Returns an invisible data frame containing values
#' and labels used to generate the figure.
#' @author AJ Vaestermark, JR Walters.
#' @references The 'doseR' package, 2018 (in press).
plotExpr <- function(se, groupings = NULL, mode_mean = TRUE,
treatment=levels(colData(se)$Treatment), LOG2 = TRUE, clusterby_grouping=TRUE,
...) {
MyGroups <- rowData(se)[[groupings]]
if (is.null(groupings)) {
stop("No groupings, e.g. groupings=\"something\"..."); return(NULL)
}
if (is.element(FALSE, treatment %in% levels(colData(se)$Treatment))) {
stop("Some treatment not in levels(colData(se)$Treatment), please check...")
return(NULL)
}
MyLabels <- NULL ; PLOT <- NULL ; NAMES <- NULL
if (is.factor(MyGroups)) {
MyGroups <- droplevels(MyGroups)
Super_ch <- if (clusterby_grouping)
levels(MyGroups) else treatment
Super_dh <- if (clusterby_grouping)
treatment else levels(MyGroups)
} else {
Super_ch <- if (clusterby_grouping) unique(MyGroups) else treatment
Super_dh <- if (clusterby_grouping) treatment else unique(MyGroups)
}
if (is.factor(colData(se)$Treatment)) {
colData(se)$Treatment <- droplevels(colData(se)$Treatment)
}
for (ch in Super_ch) {
for (dh in Super_dh) {
actual_ch <- if (clusterby_grouping)
dh else ch
actual_dh <- if (clusterby_grouping)
ch else dh
if (is.element(actual_ch, treatment)) {
NAMES <- c(NAMES, paste0(actual_ch, actual_dh))
RM <- if (mode_mean)
rowMeans(assays(se)$rpkm[, colData(se)$Treatment == actual_ch]) else
matrixStats::rowMedians(assays(se)$rpkm[, colData(se)$Treatment == actual_ch])
PLOT <- c(PLOT, RM[MyGroups == actual_dh])
MyLabels <- c(MyLabels, rep(paste0(actual_ch, actual_dh),
length(RM[MyGroups == actual_dh])))
}
}
}
if (LOG2) { PLOT <- log2(PLOT) }
PLOT[is.infinite(PLOT)] <- NA
MyLabels <- factor(MyLabels, levels = NAMES)
boxplot(PLOT ~ MyLabels, ...)
invisible(data.frame(values = PLOT, labels = MyLabels))
} # plotExpr
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.