vignettes/articles/nychanes2.Rmd
nychanes2.Rmd
Direct quotes from Tobacco exposure associated with oral microbiota oxygen utilization in the New York City Health and Nutrition Examination Study
ORA
“… differentially abundant OTUs between current smokers and never smokers to be over-represented in aerobic OTUs (Hypergeometric test, p = 0.004).”
GSEA
Significant:
“…aerobic OTUs were significantly depleted among current smokers relative to never smokers (Enrichment Score test statistic ES = −0.75, p = 0.002, GSEA permutation test).”
Non-significant:
“Anaerobic OTUs were enriched in smokers relative to never smokers but the difference was not statistically significant (ES = 0.36, p = 0.14, GSEA permutation test).”
“… enrichment of facultative anaerobic OTUs among never smokers compared to current smokers but this result was not statistically significant (ES = −0.29, p = 0.48, GSEA permutation test).”
Data used here is a subset of the original data used for the NYCHANES study. Full data can be found on GitHub. Signatures from this study have been published on BugSigDB.
The data subset presented here only contains abundance values for “Never smoker” vs “Cigarette” samples (“smokingstatus” column in metadata).
tse <- importNYCHANES()
tse
#> class: TreeSummarizedExperiment
#> dim: 1291 129
#> metadata(0):
#> assays(1): counts
#> rownames(1291): New.CleanUp.ReferenceOTU7367
#> New.CleanUp.ReferenceOTU7623 ... New.CleanUp.ReferenceOTU2608
#> New.CleanUp.ReferenceOTU5014
#> rowData names(8): Domain Phylum ... Species GenusID
#> colnames(129): NYDH0033 NYDH0026 ... NYDH1460 NYDH0847
#> colData names(714): KEY Burklab_ID ... INC3C DBQ_10_3CAT
#> reducedDimNames(0):
#> mainExpName: NULL
#> altExpNames(0):
#> rowLinks: a LinkDataFrame (1291 rows)
#> rowTree: 1 phylo tree(s) (1291 leaves)
#> colLinks: NULL
#> colTree: NULL
table(tse$smokingstatus)
#>
#> Never smoker Cigarette
#> 43 86
Summarize by genus:
tse_gn <- splitByRanks(tse)$Genus
tse_gn
#> class: TreeSummarizedExperiment
#> dim: 173 129
#> metadata(1): agglomerated_by_rank
#> assays(1): counts
#> rownames(173): Streptococcus unclassified ... Aerococcus
#> unclassified_22
#> rowData names(8): Domain Phylum ... Species GenusID
#> colnames(129): NYDH0033 NYDH0026 ... NYDH1460 NYDH0847
#> colData names(714): KEY Burklab_ID ... INC3C DBQ_10_3CAT
#> reducedDimNames(0):
#> mainExpName: NULL
#> altExpNames(0):
#> rowLinks: a LinkDataFrame (173 rows)
#> rowTree: 1 phylo tree(s) (1291 leaves)
#> colLinks: NULL
#> colTree: NULL
Biosis data:
biosis <- importBiosis()
head(biosis)
#> Genus Attribute GenusID
#> 1 Acholeplasma facultatively_anaerobic 2147
#> 2 Actinomycetaceae facultatively_anaerobic 2049
#> 3 Aeriscardovia aerobic 240233
#> 4 Aerococcus facultatively_anaerobic 1375
#> 5 Aggregatibacter facultatively_anaerobic 416916
#> 6 Alloscardovia anaerobic 419014
Signatures at the genus level:
gn_sigs <- split(biosis, factor(biosis$Attribute)) |>
lapply(function(x) unique(x$Genus))
gn_sigs_bk <- c(gn_sigs, list(background = rownames(tse_gn)))
map(gn_sigs_bk, head)
#> $aerobic
#> [1] "Aeriscardovia" "Alpinimonas" "Alysiella"
#> [4] "Cardiobacterium" "Comamonadaceae" "Corynebacteriaceae"
#>
#> $anaerobic
#> [1] "Alloscardovia" "Anaerococcus"
#> [3] "Anaeroglobus" "Bifidobacteriaceae"
#> [5] "Blvii28 wastewater-sludge group" "Butyrivibrio"
#>
#> $facultatively_anaerobic
#> [1] "Acholeplasma" "Actinomycetaceae"
#> [3] "Aerococcus" "Aggregatibacter"
#> [5] "Erysipelotrichaceae UCG-002" "Erysipelotrichaceae UCG-006"
#>
#> $background
#> [1] "Streptococcus" "unclassified" "Blautia" "Gemella"
#> [5] "unclassified_1" "Abiotrophia"
Signatures at the OTU level:
genera <- rowData(tse)$Genus
names(genera) <- rownames(tse)
otu_sigs <- map(gn_sigs, function(x) names(genera)[which(genera %in% x)])
otu_sigs_bk <- c(otu_sigs, list(background = rownames(tse)))
map(otu_sigs_bk, head)
#> $aerobic
#> [1] "New.CleanUp.ReferenceOTU264" "New.CleanUp.ReferenceOTU3954"
#> [3] "New.CleanUp.ReferenceOTU10635" "New.CleanUp.ReferenceOTU5297"
#> [5] "New.CleanUp.ReferenceOTU6080" "New.ReferenceOTU124"
#>
#> $anaerobic
#> [1] "New.CleanUp.ReferenceOTU8003" "New.CleanUp.ReferenceOTU10070"
#> [3] "New.CleanUp.ReferenceOTU8703" "New.CleanUp.ReferenceOTU3192"
#> [5] "New.CleanUp.ReferenceOTU3925" "New.CleanUp.ReferenceOTU5093"
#>
#> $facultatively_anaerobic
#> [1] "New.CleanUp.ReferenceOTU7367" "New.CleanUp.ReferenceOTU7623"
#> [3] "New.ReferenceOTU195" "New.CleanUp.ReferenceOTU2376"
#> [5] "New.CleanUp.ReferenceOTU3539" "New.CleanUp.ReferenceOTU7335"
#>
#> $background
#> [1] "New.CleanUp.ReferenceOTU7367" "New.CleanUp.ReferenceOTU7623"
#> [3] "New.ReferenceOTU195" "New.CleanUp.ReferenceOTU2376"
#> [5] "New.CleanUp.ReferenceOTU3539" "New.CleanUp.ReferenceOTU7335"
Current value:
configEBrowser(key="GS.MAX.SIZE")
#> [1] 500
New max.size value:
configEBrowser(key="GS.MAX.SIZE", value = max_sig_size)
configEBrowser(key="GS.MAX.SIZE")
#> [1] 1291
design2 = model.matrix(~smokingstatus, data = data.frame(colData(tse)))
assay.voom2 <- limma::voom(
SummarizedExperiment::assay(edger), design = design2, plot = FALSE
)
SummarizedExperiment::assay(edger) <- assay.voom2$E
class(SummarizedExperiment::assay(edger)) <- "matrix"
gsea <- sbea(
method = 'gsea', se = edger, gs = otu_sigs, perm = 1000,
alpha = 0.1 # this is for DA taxa
)
gsea_res <- as.data.frame(gsea$res.tbl) |>
mutate(GENE.SET = ifelse(PVAL < 0.05, paste0(GENE.SET, "*"), GENE.SET )) |>
filter(GENE.SET != "background")
myDataTable(gsea_res)
Significant (mixed) vs Non-Significant:
ora <- sbea(
method = 'ora', se = edger, gs = otu_sigs_bk, perm = 0,
alpha = 0.1 # This is for DA taxa
)
ora_res <- as.data.frame(ora$res.tbl) |>
mutate(GENE.SET = ifelse(PVAL < 0.05, paste0(GENE.SET, "*"), GENE.SET )) |>
filter(GENE.SET != "background")
myDataTable(ora_res)
Significant over-abundant vs Reference:
edger_up <- edger
rowData(edger_up)$ADJ.PVAL <- ifelse(
rowData(edger_up)$FC < 0, 1, rowData(edger_up)$ADJ.PVAL
)
ora_up <- sbea(
method = 'ora', se = edger_up, gs = otu_sigs_bk, perm = 0,
alpha = 0.1 # this is for DA taxa
)
ora_up_res <- as.data.frame(ora_up$res.tbl) |>
mutate(GENE.SET = ifelse(PVAL < 0.05, paste0(GENE.SET, "*"), GENE.SET )) |>
filter(GENE.SET != "background")
myDataTable(ora_up_res)
Significant under-abundant vs Reference:
edger_down <- edger
rowData(edger_down)$ADJ.PVAL <- ifelse(
rowData(edger_down)$FC < 1, 0, rowData(edger_down)$ADJ.PVAL
)
ora_down <- sbea(
method = 'ora', se = edger_down, gs = otu_sigs_bk, perm = 0,
alpha = 0.1
)
ora_down_res <- as.data.frame(ora_down$res.tbl) |>
mutate(GENE.SET = ifelse(PVAL < 0.05, paste0(GENE.SET, "*"), GENE.SET )) |>
filter(GENE.SET != "background")
myDataTable(ora_down_res)
design1 <- model.matrix(~ smokingstatus, data = data.frame(colData(tse_gn)))
assay.voom1 <- limma::voom(
SummarizedExperiment::assay(edger_gn), design = design1, plot = FALSE
)
SummarizedExperiment::assay(edger_gn) <- assay.voom1$E
class(SummarizedExperiment::assay(edger_gn)) <- "matrix"
gsea_gn <- sbea(
method = 'gsea', se = edger_gn, gs = gn_sigs, perm = 1000,
alpha = 0.1 # This is for DA taxa
)
gsea_gn_res <- as.data.frame(gsea_gn$res.tbl) |>
mutate(GENE.SET = ifelse(PVAL < 0.05, paste0(GENE.SET, "*"), GENE.SET )) |>
filter(GENE.SET != "background")
myDataTable(gsea_gn_res)
Significant (mixed) vs Non-Significant
ora_gn <- sbea(
method = 'ora', se = edger_gn, gs = gn_sigs_bk, perm = 0,
padj.method = 'BH', alpha = 0.1
)
ora_gn_res <- as.data.frame(ora_gn$res.tbl) |>
mutate(GENE.SET = ifelse(PVAL < 0.05, paste0(GENE.SET, "*"), GENE.SET )) |>
filter(GENE.SET != "background")
myDataTable(ora_gn_res)
Significant over-abundant vs Reference
edger_gn_up <- edger_gn
rowData(edger_gn_up)$ADJ.PVAL <- ifelse(
rowData(edger_gn_up)$FC < 0, 1, rowData(edger_gn_up)$ADJ.PVAL
)
ora_gn_up <- sbea(
method = 'ora', se = edger_gn_up, gs = gn_sigs_bk, alpha = 0.1, perm = 0,
padj.method = 'BH'
)
ora_gn_up_res <- as.data.frame(ora_gn_up$res.tbl) |>
mutate(GENE.SET = ifelse(PVAL < 0.05, paste0(GENE.SET, "*"), GENE.SET )) |>
filter(GENE.SET != "background")
myDataTable(ora_gn_up_res)
Significant under-abundant vs Reference
edger_gn_down <- edger_gn
rowData(edger_gn_down)$ADJ.PVAL <- ifelse(
rowData(edger_gn_down)$FC < 1, 0, rowData(edger_gn_down)$ADJ.PVAL
)
ora_gn_down <- sbea(
method = 'ora', se = edger_gn_down, gs = gn_sigs_bk, alpha = 0.1, perm = 0,
padj.method = 'BH'
)
ora_gn_down_res <- as.data.frame(ora_gn_down$res.tbl) |>
mutate(GENE.SET = ifelse(PVAL < 0.05, paste0(GENE.SET, "*"), GENE.SET )) |>
filter(GENE.SET != "background")
myDataTable(ora_gn_down_res)
sessioninfo::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────
#> setting value
#> version R version 4.4.1 (2024-06-14)
#> os Ubuntu 22.04.4 LTS
#> system x86_64, linux-gnu
#> ui X11
#> language en
#> collate en_US.UTF-8
#> ctype en_US.UTF-8
#> tz Etc/UTC
#> date 2024-06-28
#> pandoc 3.2 @ /usr/bin/ (via rmarkdown)
#>
#> ─ Packages ───────────────────────────────────────────────────────────────────
#> package * version date (UTC) lib source
#> abind 1.4-5 2016-07-21 [1] RSPM (R 4.4.0)
#> annotate 1.82.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> AnnotationDbi 1.66.0 2024-05-01 [1] Bioconductor 3.19 (R 4.4.1)
#> ape 5.8 2024-04-11 [1] RSPM (R 4.4.0)
#> beachmat 2.20.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> beeswarm 0.4.0 2021-06-01 [1] RSPM (R 4.4.0)
#> Biobase * 2.64.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> BiocGenerics * 0.50.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> BiocNeighbors 1.22.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> BiocParallel 1.38.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> BiocSingular 1.20.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> Biostrings * 2.72.1 2024-06-02 [1] Bioconductor 3.19 (R 4.4.1)
#> bit 4.0.5 2022-11-15 [1] RSPM (R 4.4.0)
#> bit64 4.0.5 2020-08-30 [1] RSPM (R 4.4.0)
#> bitops 1.0-7 2021-04-24 [1] RSPM (R 4.4.0)
#> blob 1.2.4 2023-03-17 [1] RSPM (R 4.4.0)
#> bluster 1.14.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> bslib 0.7.0 2024-03-29 [1] RSPM (R 4.4.0)
#> bugphyzzAnalyses * 0.1.19 2024-06-28 [1] local
#> cachem 1.1.0 2024-05-16 [1] RSPM (R 4.4.0)
#> cli 3.6.3 2024-06-21 [1] RSPM (R 4.4.0)
#> cluster 2.1.6 2023-12-01 [2] CRAN (R 4.4.1)
#> codetools 0.2-20 2024-03-31 [2] CRAN (R 4.4.1)
#> colorspace 2.1-0 2023-01-23 [1] RSPM (R 4.4.0)
#> crayon 1.5.3 2024-06-20 [1] RSPM (R 4.4.0)
#> crosstalk 1.2.1 2023-11-23 [1] RSPM (R 4.4.0)
#> DBI 1.2.3 2024-06-02 [1] RSPM (R 4.4.0)
#> DECIPHER 3.0.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> decontam 1.24.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> DelayedArray 0.30.1 2024-05-07 [1] Bioconductor 3.19 (R 4.4.1)
#> DelayedMatrixStats 1.26.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> desc 1.4.3 2023-12-10 [1] RSPM (R 4.4.0)
#> digest 0.6.36 2024-06-23 [1] RSPM (R 4.4.0)
#> DirichletMultinomial 1.46.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> dplyr * 1.1.4 2023-11-17 [1] RSPM (R 4.4.0)
#> DT 0.33 2024-04-04 [1] RSPM (R 4.4.0)
#> edgeR 4.2.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> EnrichmentBrowser * 2.34.1 2024-05-06 [1] Bioconductor 3.19 (R 4.4.1)
#> evaluate 0.24.0 2024-06-10 [1] RSPM (R 4.4.0)
#> fansi 1.0.6 2023-12-08 [1] RSPM (R 4.4.0)
#> fastmap 1.2.0 2024-05-15 [1] RSPM (R 4.4.0)
#> fs 1.6.4 2024-04-25 [1] RSPM (R 4.4.0)
#> generics 0.1.3 2022-07-05 [1] RSPM (R 4.4.0)
#> GenomeInfoDb * 1.40.1 2024-05-24 [1] Bioconductor 3.19 (R 4.4.1)
#> GenomeInfoDbData 1.2.12 2024-06-25 [1] Bioconductor
#> GenomicRanges * 1.56.1 2024-06-12 [1] Bioconductor 3.19 (R 4.4.1)
#> ggbeeswarm 0.7.2 2023-04-29 [1] RSPM (R 4.4.0)
#> ggplot2 3.5.1 2024-04-23 [1] RSPM (R 4.4.0)
#> ggrepel 0.9.5 2024-01-10 [1] RSPM (R 4.4.0)
#> glue 1.7.0 2024-01-09 [1] RSPM (R 4.4.0)
#> graph * 1.82.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> gridExtra 2.3 2017-09-09 [1] RSPM (R 4.4.0)
#> GSEABase 1.66.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> gtable 0.3.5 2024-04-22 [1] RSPM (R 4.4.0)
#> htmltools 0.5.8.1 2024-04-04 [1] RSPM (R 4.4.0)
#> htmlwidgets 1.6.4 2023-12-06 [1] RSPM (R 4.4.0)
#> httr 1.4.7 2023-08-15 [1] RSPM (R 4.4.0)
#> igraph 2.0.3 2024-03-13 [1] RSPM (R 4.4.0)
#> IRanges * 2.38.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> irlba 2.3.5.1 2022-10-03 [1] RSPM (R 4.4.0)
#> jquerylib 0.1.4 2021-04-26 [1] RSPM (R 4.4.0)
#> jsonlite 1.8.8 2023-12-04 [1] RSPM (R 4.4.0)
#> KEGGgraph 1.64.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> KEGGREST 1.44.1 2024-06-19 [1] Bioconductor 3.19 (R 4.4.1)
#> knitr 1.47 2024-05-29 [1] RSPM (R 4.4.0)
#> lattice 0.22-6 2024-03-20 [2] CRAN (R 4.4.1)
#> lazyeval 0.2.2 2019-03-15 [1] RSPM (R 4.4.0)
#> lifecycle 1.0.4 2023-11-07 [1] RSPM (R 4.4.0)
#> limma 3.60.3 2024-06-16 [1] Bioconductor 3.19 (R 4.4.1)
#> locfit 1.5-9.10 2024-06-24 [1] RSPM (R 4.4.0)
#> magrittr 2.0.3 2022-03-30 [1] RSPM (R 4.4.0)
#> MASS 7.3-61 2024-06-13 [2] RSPM (R 4.4.0)
#> Matrix 1.7-0 2024-04-26 [2] CRAN (R 4.4.1)
#> MatrixGenerics * 1.16.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> matrixStats * 1.3.0 2024-04-11 [1] RSPM (R 4.4.0)
#> memoise 2.0.1 2021-11-26 [1] RSPM (R 4.4.0)
#> mgcv 1.9-1 2023-12-21 [2] CRAN (R 4.4.1)
#> mia * 1.12.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> MultiAssayExperiment * 1.30.2 2024-05-29 [1] Bioconductor 3.19 (R 4.4.1)
#> munsell 0.5.1 2024-04-01 [1] RSPM (R 4.4.0)
#> nlme 3.1-165 2024-06-06 [2] RSPM (R 4.4.0)
#> permute 0.9-7 2022-01-27 [1] RSPM (R 4.4.0)
#> pillar 1.9.0 2023-03-22 [1] RSPM (R 4.4.0)
#> pkgconfig 2.0.3 2019-09-22 [1] RSPM (R 4.4.0)
#> pkgdown 2.0.9 2024-04-18 [1] RSPM (R 4.4.0)
#> plyr 1.8.9 2023-10-02 [1] RSPM (R 4.4.0)
#> png 0.1-8 2022-11-29 [1] RSPM (R 4.4.0)
#> purrr * 1.0.2 2023-08-10 [1] RSPM (R 4.4.0)
#> R6 2.5.1 2021-08-19 [1] RSPM (R 4.4.0)
#> ragg 1.3.2 2024-05-15 [1] RSPM (R 4.4.0)
#> Rcpp 1.0.12 2024-01-09 [1] RSPM (R 4.4.0)
#> RCurl 1.98-1.14 2024-01-09 [1] RSPM (R 4.4.0)
#> reshape2 1.4.4 2020-04-09 [1] RSPM (R 4.4.0)
#> Rgraphviz 2.48.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> rlang 1.1.4 2024-06-04 [1] RSPM (R 4.4.0)
#> rmarkdown 2.27 2024-05-17 [1] RSPM (R 4.4.0)
#> RSQLite 2.3.7 2024-05-27 [1] RSPM (R 4.4.0)
#> rsvd 1.0.5 2021-04-16 [1] RSPM (R 4.4.0)
#> S4Arrays 1.4.1 2024-05-20 [1] Bioconductor 3.19 (R 4.4.1)
#> S4Vectors * 0.42.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> safe 3.44.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> sass 0.4.9 2024-03-15 [1] RSPM (R 4.4.0)
#> ScaledMatrix 1.12.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> scales 1.3.0 2023-11-28 [1] RSPM (R 4.4.0)
#> scater 1.32.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> scuttle 1.14.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> sessioninfo 1.2.2 2021-12-06 [1] RSPM (R 4.4.0)
#> SingleCellExperiment * 1.26.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> SparseArray 1.4.8 2024-05-24 [1] Bioconductor 3.19 (R 4.4.1)
#> SparseM 1.84 2024-06-25 [1] RSPM (R 4.4.0)
#> sparseMatrixStats 1.16.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> statmod 1.5.0 2023-01-06 [1] RSPM (R 4.4.0)
#> stringi 1.8.4 2024-05-06 [1] RSPM (R 4.4.0)
#> stringr 1.5.1 2023-11-14 [1] RSPM (R 4.4.0)
#> SummarizedExperiment * 1.34.0 2024-05-01 [1] Bioconductor 3.19 (R 4.4.1)
#> systemfonts 1.1.0 2024-05-15 [1] RSPM (R 4.4.0)
#> textshaping 0.4.0 2024-05-24 [1] RSPM (R 4.4.0)
#> tibble 3.2.1 2023-03-20 [1] RSPM (R 4.4.0)
#> tidyr 1.3.1 2024-01-24 [1] RSPM (R 4.4.0)
#> tidyselect 1.2.1 2024-03-11 [1] RSPM (R 4.4.0)
#> tidytree 0.4.6 2023-12-12 [1] RSPM (R 4.4.0)
#> treeio 1.28.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> TreeSummarizedExperiment * 2.12.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> UCSC.utils 1.0.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> utf8 1.2.4 2023-10-22 [1] RSPM (R 4.4.0)
#> vctrs 0.6.5 2023-12-01 [1] RSPM (R 4.4.0)
#> vegan 2.6-6.1 2024-05-21 [1] RSPM (R 4.4.0)
#> vipor 0.4.7 2023-12-18 [1] RSPM (R 4.4.0)
#> viridis 0.6.5 2024-01-29 [1] RSPM (R 4.4.0)
#> viridisLite 0.4.2 2023-05-02 [1] RSPM (R 4.4.0)
#> xfun 0.45 2024-06-16 [1] RSPM (R 4.4.0)
#> XML 3.99-0.17 2024-06-25 [1] RSPM (R 4.4.0)
#> xtable 1.8-4 2019-04-21 [1] RSPM (R 4.4.0)
#> XVector * 0.44.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#> yaml 2.3.8 2023-12-11 [1] RSPM (R 4.4.0)
#> yulab.utils 0.1.4 2024-01-28 [1] RSPM (R 4.4.0)
#> zlibbioc 1.50.0 2024-04-30 [1] Bioconductor 3.19 (R 4.4.1)
#>
#> [1] /usr/local/lib/R/site-library
#> [2] /usr/local/lib/R/library
#>
#> ──────────────────────────────────────────────────────────────────────────────