Workflow summary:
Install moal and test omic() function workflow:
# -----
# Paris-Saclay - GPL3 - https://github.com/fdumbioinfo/moal
# title: 1 - moal omic() demo
# date: 10-10-2026
# -----
#
# Install moal
if(!require("moal",quietly=TRUE)){source("https://raw.githubusercontent.com/fdumbioinfo/rtools/main/moal-demo/0-moal-install-r-universe.r")}
if(!require("curl",quietly=TRUE)){install.packages("curl")}
#
# Test omic()
library(moal)
??moal::omic
# create output directory
if(!dir.exists("1-omic-outputdata")){"1-omic-outputdata" %>% dir.create}
#
# data
# normalized gene expression matrix
"https://raw.githubusercontent.com/fdumbioinfo/rtools/main/moal-demo/inputdata/GSE65055_datanorm_22_23786.tsv" -> url
url %>% curl::curl_download("GSE65055_datanorm_22_23786.tsv",handle=curl::new_handle())
"GSE65055_datanorm_22_23786.tsv" %>% input -> dat
dat %>% head
# sample information file
"https://raw.githubusercontent.com/fdumbioinfo/rtools/main/moal-demo/inputdata/GSE65055_metadata_4_22.tsv" -> url
url %>% curl::curl_download("GSE65055_metadata_4_22.tsv",handle=curl::new_handle())
"GSE65055_metadata_4_22.tsv" %>% input -> sif
sif %>% head
# Ordering factors levels for fold-changes
sif$ANEUPLOIDY %>% ordered(c("Control","T13","T18","T21")) -> sif$ANEUPLOIDY
sif$TISSUE %>% as.factor -> sif$TISSUE
# gene annotation
dat$rowID %>% annotdb(species = "hs", idtype = "GENE", dboutput = "ncbi") -> annot
annot %>% head
annot %>% dplyr::select(GeneID,Symbol) -> annot
annot %>% head
#
# omic workflow : anova and GSEA functional analysis
"1-omic-outputdata" -> path
"GSE65055" -> dirname
NULL -> sample
T -> doena
parallel::detectCores() %>% "/"(2) -> nbcore
# NULL -> nbcore # use all core
#
omic(
#
# input
dat = dat , sif = sif,
annot = annot, species = "hs",
#
# anova model
model = "ANEUPLOIDY", padj = "none", anovafc = "anovafc",
batch = "TISSUE",
# paired = NULL,
#
# anova filters
# threshold = c(1, 2, 3, 4, 9, 10, 11, 12),
dovenn = T, docluster = T, dopattern = T,
#
# plot
doheatmap = T, dovolcanoplot = T, dolineplot = T, doboxplotrow = T,
#
# functional analysis doena for GSEA and doenaora for ORA significant feature lists
doena = doena, doenaora = F, gmtfiles = NULL,
dotopheatmap = T, dotopgenesetheatmap = T, dogmtgenesetheatmap = F,
dotopnetwork = T, dotopgenesetnetwork = F, dogmtgenesetnetwork = F,
#
# output
path = path, dirname = dirname, sample = sample,
# parallelisation
dopar = T, nbcore = nbcore, libloc = NULL, savehistory = T )
#
Test other examples for functional analysis, volcanoplot, heatmap...
UMS IPSIT BIOINFO at Paris Saclay University: https://www.ipsit.universite-paris-saclay.fr/?-bioinfo-
r-universe: https://fdumbioinfo.r-universe.dev/moal
bioRxiv preprint: https://doi.org/10.1101/2023.10.17.562686
Zenodo repository: https://zenodo.org/records/15309968
Release updates:
1.2.3
Add replacena function to replace NA or 0 value matrix by background noise distribution
Add normalization method to norm function : TMM, TMMwsp, RLE, upperquartile from EdgeR
Add omic function available without input data to simulate random H0 analysis using normal distribution accross factor levels
Change annot function name to annotdb
1.2.2
Update annotation packages and functional analysis available for Pan troglodytes, Bos taurus, Drosophila melanogaster, Caenorhabditis elegans
Automatically annot when dat matrix first column contains Ensembl gene or NCBI gene ID
Automatically join data and annotation tables (so could have different row numbers)
1.2.1
Fix bug for unbalanced design case using anova model with interaction. choose gsea rank Add three factors interaction design
1.2.0
Display improvements on graphics.
Improve omic() function workflow time computing.
Improve omic() output directory browsing and volume.
Enrichment function gsneain():