#' Checking the input objects for GeneTonic #' #' Checking the input objects for GeneTonic, whether these are all set for running #' the app #' #' Some suggestions on the requirements for each parameter are returned in the #' error messages. #' #' @param dds A `DESeqDataSet` object, normally obtained after running your data #' through the `DESeq2` framework. #' @param res_de A `DESeqResults` object. As for the `dds` parameter, this is #' also commonly used in the `DESeq2` framework. #' @param res_enrich A `data.frame` object, storing the result of the functional #' enrichment analysis. See more in the main function, [GeneTonic()], to check the #' formatting requirements (a minimal set of columns should be present). #' @param annotation_obj A `data.frame` object, containing two columns, `gene_id` #' with a set of unambiguous identifiers (e.g. ENSEMBL ids) and `gene_name`, #' containing e.g. HGNC-based gene symbols. #' #' @return Invisible NULL #' @export #' #' @examples #' #' library("macrophage") #' library("DESeq2") #' library("org.Hs.eg.db") #' library("AnnotationDbi") #' #' # dds object #' data("gse", package = "macrophage") #' dds_macrophage <- DESeqDataSet(gse, design = ~line + condition) #' rownames(dds_macrophage) <- substr(rownames(dds_macrophage), 1, 15) #' dds_macrophage <- estimateSizeFactors(dds_macrophage) #' #' # annotation object #' anno_df <- data.frame( #' gene_id = rownames(dds_macrophage), #' gene_name = mapIds(org.Hs.eg.db, #' keys = rownames(dds_macrophage), #' column = "SYMBOL", #' keytype = "ENSEMBL"), #' stringsAsFactors = FALSE, #' row.names = rownames(dds_macrophage) #' ) #' #' # res object #' data(res_de_macrophage, package = "GeneTonic") #' res_de <- res_macrophage_IFNg_vs_naive #' #' # res_enrich object #' data(res_enrich_macrophage, package = "GeneTonic") #' res_enrich <- shake_topGOtableResult(topgoDE_macrophage_IFNg_vs_naive) #' res_enrich <- get_aggrscores(res_enrich, res_de, anno_df) #' #' checkup_GeneTonic(dds = dds_macrophage, #' res_de = res_de, #' res_enrich = res_enrich, #' annotation_obj = anno_df) #' # if all is fine, it should return an invisible NULL and a simple message checkup_GeneTonic <- function(dds, res_de, res_enrich, annotation_obj) { # checking dds if (!is(dds, "DESeqDataSet")) stop("The provided `dds` is not a DESeqDataSet object, please check your input parameters") # check normalization factors/size factors are in if (is.null(sizeFactors(dds)) & is.null(normalizationFactors(dds))) { warning("Could not find size factors for the provided `dds` object...", "\nPlease compute them first by calling\n", "'dds <- estimateSizeFactors(dds)'") # dds <- estimateSizeFactors(dds) } # checking res_de if (!is(res_de, "DESeqResults")) stop("The provided `res_de` is not a DESeqResults object, please check your input parameters") # checking that results and dds are related ## at least a subset of dds should be in res if (!all(rownames(res_de) %in% rownames(dds))) warning("It is likely that the provided `dds` and `res_de` objects are not related ", "to the same dataset (the row names of the results are not all in the dds). ", "Are you sure you want to proceed?") # checking res_enrich colnames_res_enrich <- c("gs_id", "gs_description", "gs_pvalue", "gs_genes", "gs_de_count", "gs_bg_count") # gs_ontology? more? if (!all(colnames_res_enrich %in% colnames(res_enrich))) stop("The provided `res_enrich` object does not respect the format required to use in GeneTonic\n", "e.g. all required column names have to be present.\n", "You might want to use one of the `shaker_*` functions to convert it.\n", "Required columns: ", paste(colnames_res_enrich, collapse = ", ")) # checking annotation_obj colnames_annotation_obj <- c("gene_id", "gene_name") if (!all(colnames_annotation_obj %in% colnames(annotation_obj))) stop("The provided `annotation_obj` object does not respect the format required to use in GeneTonic\n", "e.g. all required column names have to be present.\n", "You can use e.g. `pcaExplorer::get_annotation_orgdb()` for this purpose.\n", "Required columns: ", paste(colnames_annotation_obj, collapse = ", ")) message("All set to enjoy GeneTonic!") invisible(NULL) }