Nothing
###### PROTEIN EXPERIMENT ======================================================
#' @rdname SilacProteinExperiment-class
#' @name SilacProteinExperiment-class
#' @title SilacProteinExperiment class
#'
#' @description S4 class that extends the \code{\link{SummarizedExperiment}}
#' class. This class is designed for proteomics data, more especifically
#' protein level data. The \code{metadata} slot comes already initialized with
#' the metaoptions (see details).
#'
#' @details The \code{SilacProteinExperiment} class has been designed to store
#' protein level data and to be used in the functions provided in this package
#' for pulsed SILAC data analysis; in combination with the other two classes
#' from the package: the \code{\link{SilacPeptideExperiment}} and
#' \code{\link{SilacProteomicsExperiment}} classes.
#'
#' SilacProteinExperiment metaoptions are stored in the \code{metadata} slot
#' This contains a \code{list} with some parameters that are automatically
#' initialized by the constructor. Some parameters are mandatory for certain
#' functions or operations. The user can add or remove items at their
#' discretion. These parameters are meant to help automate certain pipeline or
#' data analysis steps. These metaoptions are:
#' \describe{
#' \item{conditionCol}{\code{character} indicating the column name of
#' \code{colData(x)} that defines the different experiment conditions.}
#' \item{timeCol}{\code{character} indicating the column name of
#' \code{colData(x)} that defines the different timepoints of the experiment.}
#'}
#'
#' @section Constructor:
#' See \link{SilacProteinExperiment-constructor} for details.
#'
#' @section Accessors:
#' See \link{SilacProteinPeptideExperiment-accessors} for details.
#'
#' @seealso \code{\link{SilacProteinExperiment-constructor}},
#' \code{\link{SilacProteinPeptideExperiment-accessors}},
#' \code{\link{SummarizedExperiment}}
#' @importClassesFrom SummarizedExperiment SummarizedExperiment
#' @import SummarizedExperiment
#' @export
.SilacProteinExperiment <- setClass(Class = 'SilacProteinExperiment',
contains = 'SummarizedExperiment'
)
.valid.SilacProteinExperiment.metaoptions <- function(x) {
metaoptions_names <- c('conditionCol',
'timeCol')
## missing one or more of the metaoptions
if (!all(metaoptions_names %in% names(metaoptions(x)))) {
missing_names_pos <- which(!metaoptions_names %in% names(metaoptions(x)))
missing_names <- metaoptions_names[missing_names_pos]
txt <- sprintf(
'Incomplete metaoptions, the following are missing: %s',
paste(missing_names, collapse = ' ')
)
return(txt)
}
## all validity is passed
return(NULL)
}
.valid.SilacProteinExperiment.rowData <- function(x) {
if (is.null(x@elementMetadata)) {
return(NULL)
}
rd_rows <- nrow(x@elementMetadata)
if (rd_rows != nrow(x)) {
txt <- sprintf(
paste('The number of rows of rowData (%d) does not match with the',
'number of rows of the ProteinExperiment (%d)'),
rd_rows, nrow(x))
return(txt)
}
return(NULL)
}
.valid.SilacProteinExperiment.colData <- function(x) {
if (any(duplicated(colData(x)))) {
return('colData cannot have duplicated entries')
} else {
return(NULL)
}
}
## Wrapper for all the validity check functions
.valid.SilacProteinExperiment <- function(x) {
c(.valid.SilacProteinExperiment.metaoptions(x),
.valid.SilacProteinExperiment.rowData(x),
.valid.SilacProteinExperiment.colData(x))
}
#' @importFrom S4Vectors setValidity2
#' @keywords internal
setValidity2('SilacProteinExperiment', .valid.SilacProteinExperiment)
###### PEPTIDE EXPERIMENT ======================================================
#' @rdname SilacPeptideExperiment-class
#' @name SilacPeptideExperiment-class
#' @title SilacPeptideExperiment class
#'
#' @description S4 class that extends the \code{\link{SummarizedExperiment}}
#' class. This class is designed for proteomics data, more especifically
#' peptide level data. The \code{metadata} slot comes already initialized with
#' the metaoptions (see details).
#'
#' @details The \code{SilacPeptideExperiment} class has been designed to store
#' peptide level data and to be used in the functions provided in this package
#' for pulsed SILAC data analysis; in combination with the other two classes
#' from the package: the \code{\link{SilacProteinExperiment}} and
#' \code{\link{SilacProteomicsExperiment}} classes.
#'
#' ProteinExperiment metaoptions are stored in the \code{metadata} slot
#' This contains a \code{list} with some parameters that are automatically
#' initialized by the constructor. Some parameters are mandatory for certain
#' functions or operations. The user can add or remove items at their
#' discretion. These parameters are meant to help automate certain pipeline or
#' data analysis steps. These metaoptions are:
#' \describe{
#' \item{conditionCol}{\code{character} indicating the column name of
#' \code{colData(x)} that defines the different experiment conditions.}
#' \item{timeCol}{\code{character} indicating the column name of
#' \code{colData(x)} that defines the different timepoints of the experiment.}
#' \item{proteinCol}{\code{character} indicating the column name of
#' \code{rowData(x)} that defines to which protein a peptide is assigned.}
#'}
#'
#' @section Constructor:
#' See \link{SilacPeptideExperiment-constructor} for details.
#'
#' @section Accessors:
#' See \link{SilacProteinPeptideExperiment-accessors} for details.
#'
#' @seealso \code{\link{SilacPeptideExperiment-constructor}},
#' \code{\link{SilacProteinPeptideExperiment-accessors}},
#' \code{\link{SummarizedExperiment}}
#' @importClassesFrom SummarizedExperiment SummarizedExperiment
#' @export
.SilacPeptideExperiment <- setClass(Class = 'SilacPeptideExperiment',
contains = 'SilacProteinExperiment'
)
.valid.SilacPeptideExperiment.metaoptions<- function(x) {
metaoptions_names <- c('conditionCol',
'timeCol',
'proteinCol')
## missing one or more of the metaoptions
if (!all(metaoptions_names %in% names(metadata(x)))) {
missing_names_pos <- which(!metaoptions_names %in% names(metaoptions(x)))
missing_names <- metaoptions_names[missing_names_pos]
txt <- sprintf(
'Incomplete metaoptions, the following are missing: %s',
paste(missing_names, collapse = ' ')
)
return(txt)
}
## all validity is passed
return(NULL)
}
.valid.SilacPeptideExperiment.rowData <- function(x) {
if (is.null(x@elementMetadata)) {
return(NULL)
}
rd_rows <- nrow(x@elementMetadata)
if (rd_rows != nrow(x)) {
txt <- sprintf(
paste('The number of rows of rowData (%d) does not match with the',
'number of rows of the PeptideExperiment (%d)'),
rd_rows, nrow(x))
return(txt)
}
return(NULL)
}
.valid.SilacPeptideExperiment.colData <- function(x) {
if (any(duplicated(colData(x)))) {
return('colData cannot have duplicated entries')
} else {
return(NULL)
}
}
## Wrapper for all the validity check functions
.valid.SilacPeptideExperiment <- function(x) {
c(.valid.SilacPeptideExperiment.metaoptions(x),
.valid.SilacPeptideExperiment.rowData(x),
.valid.SilacPeptideExperiment.colData(x))
}
#' @importFrom S4Vectors setValidity2
#' @keywords internal
setValidity2('SilacPeptideExperiment', .valid.SilacPeptideExperiment)
###### PROTEOMICS EXPERIMENT ===================================================
#' @rdname SilacProteomicsExperiment-class
#' @name SilacProteomicsExperiment-class
#' @title SilacProteomicsExperiment class
#'
#' @description S4 class that contains a \code{SilacProteinExperiment} object
#' and a \code{SilacPeptideExperiment} object. The two objects are linked by a
#' \code{data.frame} (linkerDf). This class can be used to manage both protein
#' and peptide data at the same time.
#'
#' @slot SilacProteinExperiment Contains a \code{SilacProteinExperiment} object.
#' @slot SilacPeptideExperiment Contains a \code{SilacPeptideExperiment} object.
#' @slot colData Contains a \code{data.frame} with sample information like
#' conditions, replicates, etc.
#' @slot linkerDf Contains a \code{data.frame} that has been created with
#' \code{\link{buildLinkerDf}}. It contains the relationships between proteins
#' and peptides.
#' @slot metadata Contains a \code{list} to store any kind of experiment-wide
#' data and the metaoptions.
#' @details The \code{SilacProteomicsExperiment} object is just a
#' \code{SilacProteinExperiment} object and a \code{SilacPeptideExperiment}
#' object together.
#'
#' The rows of the \code{SilacProteinExperiment} object represent proteins.
#' The rows of the \code{SilacPeptideExperiment} object represent peptides.
#'
#' The columns of the \code{SilacProteomicsExperiment} object represent samples.
#' Samples are shared at both protein and peptide levels.
#'
#' Experiment-wide information can be stored in the \code{metadata} slot, which
#' is accessed with the \code{metadata} function. This contains a \code{list}
#' object in which each item is left to the discretion of the user. Some
#' possible examples could be: data of the experiment, author, machine used,
#' etc.
#'
#' SilacProteomicsExperiment options are stored in the \code{metadata} slot.
#' This contains a \code{list} with some parameters that are automatically
#' initialized by the constructor. Some parameters are mandatory for certain
#' functions or operations. The user can add or remove items at their
#' discretion. These parameters are meant to help automate certain pipeline or
#' data analysis steps. These metaoptions are:
#' These metaoptions are:
#' \describe{
#' \item{conditionCol}{\code{character} indicating the column name of
#' \code{colData(x)} that defines the different experiment conditions.}
#' \item{timeCol}{\code{character} indicating the column name of
#' \code{colData(x)} that defines the different timepoints of the experiment.}
#' \item{idColProt}{A \code{character} indicating which column from the
#' rowData (protein) should be used as ids.}
#' \item{idColPept}{A \code{character} indicating which column from the
#' rowData (peptides) should be used as ids.}
#' \item{linkedSubset}{A \code{logical} if subsetting should be linked between
#' proteins and peptide.}
#' \item{subsetMode}{A \code{character}, either 'protein' or 'peptide'
#' indicating which level should be used first when subsetting.}
#'}
#'
#' @section Constructor:
#' See \link{SilacProteomicsExperiment-constructor} for details.
#'
#' @section Accessors:
#' See \link{SilacProteomicsExperiment-accessors} for details.
#'
#' @seealso \code{\link{SilacProteomicsExperiment-constructor}},
#' \code{\link{SilacProteomicsExperiment-accessors}},
#' \code{\link{SilacProteinExperiment}},
#' \code{\link{SilacPeptideExperiment}}
#' @export
.SilacProteomicsExperiment <- setClass('SilacProteomicsExperiment',
slots = representation(SilacProteinExperiment = 'SilacProteinExperiment',
SilacPeptideExperiment = 'SilacPeptideExperiment',
colData = 'DataFrame',
linkerDf = 'data.frame',
metadata = 'list')
)
.valid.SilacProteomicsExperiment.ncol <- function(x) {
ncol_prot <- ncol(x@SilacProteinExperiment)
ncol_pept <- ncol(x@SilacPeptideExperiment)
if (ncol_prot != ncol_pept) {
txt <- sprintf(
paste('\n Number of columns of ProteinExperiment (%d) must be equal to',
'the number of columns of PeptideExperiment (%d)'),
ncol_prot, ncol_pept
)
return(txt)
} else {
return(NULL)
}
}
.valid.SilacProteomicsExperiment.metaoptions <- function(x) {
metaoptions_names <- c('conditionCol',
'timeCol',
'idColProt',
'idColPept',
'linkedSubset',
'subsetMode',
'proteinCol')
## missing one or more of the metaoptions
if (!all(metaoptions_names %in% names(metaoptions(x)))) {
missing_names_pos <- which(!metaoptions_names %in% names(metaoptions(x)))
missing_names <- metaoptions_names[missing_names_pos]
txt <- sprintf(
'Incomplete metaoptions, the following are missing: %s',
paste(missing_names, collapse = ' ')
)
return(txt)
}
## metaoptions have to be NA, numeric or character
## checking if the column is at the colData/rowData is done on function call
## not on validity because it could cause problems when changing those
## DataFrames
for (mopt in metaoptions_names) {
val <- metaoptions(x)[[mopt]]
## hardcode two special metaoptions
if (mopt == 'subsetMode') {
if (val %in% c('protein', 'peptide')) {
next
} else {
txt <- 'subsetMode must be a character: "protein" or "peptide"'
return(txt)
}
}
if (mopt == 'linkedSubset') {
if (val %in% c(TRUE, FALSE)) {
next
} else {
txt <- 'linkedSubset must be a logical: TRUE or FALSE'
return(txt)
}
}
}
}
.valid.SilacProteomicsExperiment.linkerDf <- function(x){
linkM <- x@linkerDf
# no linker matrix, no need to check
if (nrow(linkM) == 0) {
return(NULL)
}
if (!is.data.frame(linkM)) {
return('The linkerDf should be a data.frame')
}
if (ncol(linkM) != 4) {
return('The linkerDf should have 4 columns')
}
if (metaoptions(x)[['linkedSubset']]) {
if (length(unique(linkM[, 3])) < nrow(rowDataProt(x))) {
return('Not all proteins have a link')
}
if (length(unique(linkM[, 4])) < nrow(rowDataPept(x))) {
return('Not all peptides have a link')
}
}
return(NULL)
}
.valid.SilacProteomicsExperiment.colData <- function(x) {
if (any(duplicated(colData(x)))) {
return('colData cannot have duplicated entries')
} else {
return(NULL)
}
}
## Wrapper for all the validity check functions
.valid.SilacProteomicsExperiment <- function(x) {
c(.valid.SilacProteomicsExperiment.ncol(x),
.valid.SilacProteomicsExperiment.metaoptions(x),
.valid.SilacProteomicsExperiment.linkerDf(x),
.valid.SilacProteomicsExperiment.colData(x))
}
#' @importFrom S4Vectors setValidity2
#' @keywords internal
setValidity2('SilacProteomicsExperiment', .valid.SilacProteomicsExperiment)
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.