#' @include generateResultsTable.R
#'
#' @description
#' In general, \code{generateResultsTable}, \code{generateEnzymesTable}
#' and \code{generateResultsGraph} provide the results of an enrichment
#' in several formats.
#'
#' Function \code{generateResultsTable} returns a table
#' that contains the best hits from
#' a \code{\link{FELLA.USER}} object
#' with a successful enrichment analysis.
#' Similarly, \code{generateEnzymesTable} returns
#' a data frame with the best scoring enzyme families and their
#' annotated genes.
#'
#' @details
#' Functions \code{generateResultsTable} and
#' \code{generateEnzymesTable} need a
#' \code{\link{FELLA.DATA}} object and a
#' \code{\link{FELLA.USER}} object with a successful enrichment.
#' \code{generateResultsTable} provides the entries
#' whose p-score is below the chosen \code{threshold} in a tabular format.
#' \code{generateEnzymesTable} returns a table
#' that contains (1) the enzymes that are below the user-defined
#' p-score threshold, along with (2) the genes that belong to
#' the enzymatic families in the organism defined in the database,
#' and (3) GO labels of such enzymes, if \code{mart.options} is
#' not \code{NULL} and points to the right database.
#'
#' @inheritParams .params
#' @param method one in \code{"diffusion"}, \code{"pagerank"}
#'
#' @return \code{generateEnzymesTable} returns a
#' data.frame that contains the enzymes below the \code{p.score} threshold,
#' along with their genes and GO labels
#'
#' @rdname export-funs
#'
#' @import igraph
#' @export
generateEnzymesTable <- function(
method = "diffusion",
threshold = 0.05,
nlimit = 250,
LabelLengthAtPlot = 45,
capPscores = 1e-6,
mart.options = list(
biomart = "ensembl", dataset = "hsapiens_gene_ensembl"),
object = NULL,
data = NULL,
...) {
checkArgs <- checkArguments(
method = method,
threshold = threshold,
nlimit = nlimit,
LabelLengthAtPlot = LabelLengthAtPlot,
object = object,
data = data)
if (!checkArgs$valid)
stop("Bad argument when calling function 'generateEnzymesGraph'.")
if (getStatus(data) != "loaded"){
stop("'data' points to an empty FELLA.DATA object")
}
if (!(method %in% c("diffusion", "pagerank"))) {
warning(
"Method should be one of: 'diffusion', 'pagerank'",
" but it is ", method, ". Returning NULL...")
return(NULL)
}
if (is.na(getValid(object, method)) | !getValid(object, method)) {
warning(
"Mehod ", method, " has not been executed yet. ",
"Returning NULL...")
return(invisible())
}
message("Writing ", method, " enzymes...")
id.ec <- getCom(data, level = 3, format = "id")
pscores.ec <- sort(getPscores(object, method)[id.ec])
pscores.ec[pscores.ec < capPscores] <- capPscores
if (pscores.ec[1] >= threshold) {
message("No enzyme is below the p-score threshold.")
return(NULL)
}
nodePscores <- head(pscores.ec[pscores.ec < threshold], nlimit)
nodeIds <- names(nodePscores)
nodeNames <- vapply(
getName(data, id = nodeIds),
function(id) {
ans <- id[1]
if (is.null(ans)) return(NULL)
if (nchar(ans) > LabelLengthAtPlot)
ans <- paste0(substr(ans, 1, LabelLengthAtPlot), "...")
return(ans)
},
FUN.VALUE = character(1))
g <- getGraph(data)
nodeGenes <- vapply(
V(g)[nodeIds]$entrez,
function(genes) paste(genes, collapse = ";"),
FUN.VALUE = character(1)
)
out.df <- data.frame(
"EC_number" = nodeIds,
"p.score" = nodePscores,
"EC_name" = nodeNames,
"Genes" = nodeGenes,
stringsAsFactors = FALSE)
rownames(out.df) <- NULL
if (!is.null(mart.options)) {
g <- addGOToGraph(
graph = g, GOterm = NULL, mart.options = mart.options)
nodeGO <- vapply(
V(g)[nodeIds]$GO,
function(goterms) paste(goterms, collapse = ";"),
FUN.VALUE = character(1)
)
out.df$GO_id <- nodeGO
}
message("Done.")
return(out.df)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.