This script annotates muscle CpGs, saves data for TFBS enrichment analysis, locates nearest genes, and reports any DMRs.
Load packages
library(ggrepel)
library(GenomicRanges)
library(ggpubr)
library(DNAmArray)
library(tidyverse)
Load data
load("../GOTO_Data/GOTO_results-top-muscle-adj.Rdata")
head(top_cpgs)
## cpg beta SE p padj_fdr
## cg12394201 cg12394201 -0.06244505 0.008518138 1.400163e-11 1.058211e-05
## cg24161080 cg24161080 -0.08385868 0.011676090 3.564446e-11 1.346963e-05
## cg05008948 cg05008948 -0.03083088 0.004617073 7.398424e-10 1.863853e-04
## cg21342383 cg21342383 -0.01871533 0.002916373 3.257549e-09 4.923961e-04
## cg01668986 cg01668986 -0.04349693 0.006753537 2.859493e-09 4.923961e-04
## cg13585930 cg13585930 -0.05644199 0.008913697 5.230718e-09 6.588761e-04
## t N
## cg12394201 -6.757889 147
## cg24161080 -6.621138 148
## cg05008948 -6.157324 148
## cg21342383 -5.918063 148
## cg01668986 -5.939468 148
## cg13585930 -5.839661 148
dim(top_cpgs)
## [1] 162 7
manifest_hg19 (fetched in 2023 from https://zwdzwd.github.io/InfiniumAnnotation)
probeID as cpg - CpG IDCpG_chrm as cpg_chr_hg19 - chromosome (hg19)CpG_beg as cpg_start_hg19 - CpG start position (hg19)CpG_end as cpg_end_hg19 - CpG end position (hg19)probe_strand as cpg_strand - strandgene_HGNCmanifest_hg19 <- read_tsv(
"/exports/molepi/users/ljsinke/LLS/Shared_Data/Manifests/EPIC.hg19.manifest.tsv.gz")
## Rows: 865918 Columns: 57
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: "\t"
## chr (21): CpG_chrm, probe_strand, probeID, channel, designType, nextBase, ne...
## dbl (24): CpG_beg, CpG_end, address_A, address_B, probeCpGcnt, context35, pr...
## lgl (12): posMatch, MASK_mapping, MASK_typeINextBaseSwitch, MASK_rmsk15, MAS...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
anno <- manifest_hg19 %>%
dplyr::select(
cpg = probeID,
cpg_chr = CpG_chrm,
cpg_start = CpG_beg,
cpg_end = CpG_end,
cpg_strand = probe_strand,
gene_HGNC
) %>%
mutate(
cpg_chr = substr(cpg_chr,4,5)
)
anno <- anno %>%
dplyr::filter(cpg %in% top_cpgs$cpg)
manifest_chrom <- read_tsv(
"/exports/molepi/users/ljsinke/LLS/Shared_Data/Manifests/EPIC.hg19.REMC.chromHMM.tsv.gz"
)
## Rows: 865918 Columns: 131
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: "\t"
## chr (129): CpG_chrm, probeID, E001, E002, E003, E004, E005, E006, E007, E008...
## dbl (2): CpG_beg, CpG_end
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
manifest_chrom <- manifest_chrom %>%
dplyr::select(
cpg = probeID,
E107, E108)
anno <- left_join(
anno, manifest_chrom,
by="cpg"
)
top_cpgs <- left_join(top_cpgs, anno, by="cpg")
head(top_cpgs)
## cpg beta SE p padj_fdr t N
## 1 cg12394201 -0.06244505 0.008518138 1.400163e-11 1.058211e-05 -6.757889 147
## 2 cg24161080 -0.08385868 0.011676090 3.564446e-11 1.346963e-05 -6.621138 148
## 3 cg05008948 -0.03083088 0.004617073 7.398424e-10 1.863853e-04 -6.157324 148
## 4 cg21342383 -0.01871533 0.002916373 3.257549e-09 4.923961e-04 -5.918063 148
## 5 cg01668986 -0.04349693 0.006753537 2.859493e-09 4.923961e-04 -5.939468 148
## 6 cg13585930 -0.05644199 0.008913697 5.230718e-09 6.588761e-04 -5.839661 148
## cpg_chr cpg_start cpg_end cpg_strand gene_HGNC E107
## 1 11 43942417 43942419 + ALKBH3-AS1;RP11-613D13.4 6_EnhG
## 2 18 33889786 33889788 - FHOD3 7_Enh
## 3 7 99160713 99160715 + GS1-259H13.10;ZNF655 4_Tx
## 4 10 127661991 127661993 - FANK1;FANK1-AS1 15_Quies
## 5 8 21541541 21541543 - <NA> 7_Enh
## 6 10 72027356 72027358 + NPFFR1 14_ReprPCWk
## E108
## 1 6_EnhG
## 2 7_Enh
## 3 6_EnhG
## 4 15_Quies
## 5 7_Enh
## 6 14_ReprPCWk
CpGs for HOMER
homer <- top_cpgs %>%
mutate(
cpg_chr = paste0('chr', cpg_chr)) %>%
dplyr::select(
cpg,
chr = cpg_chr,
start = cpg_start,
end = cpg_end,
strand = cpg_strand
)
head(homer)
## cpg chr start end strand
## 1 cg12394201 chr11 43942417 43942419 +
## 2 cg24161080 chr18 33889786 33889788 -
## 3 cg05008948 chr7 99160713 99160715 +
## 4 cg21342383 chr10 127661991 127661993 -
## 5 cg01668986 chr8 21541541 21541543 -
## 6 cg13585930 chr10 72027356 72027358 +
write_tsv(homer, file="../GOTO_Data/Homer/GOTO_Homer-Muscle.tsv")
Save significant CpGs
print(paste0("There are ",
nrow(top_cpgs),
" CpGs significant at 5% FDR level"))
## [1] "There are 162 CpGs significant at 5% FDR level"
cpg_top <- top_cpgs$cpg
Save gene locations (saved previously)
txdb <- makeTxDbFromEnsembl(organism = "Homo sapiens",
release = 75,
circ_seqs = NULL,
server = "ensembldb.ensembl.org",
username = "anonymous", password = NULL, port = 0L,
tx_attrib = NULL)
gene_range <- unlist(cdsBy(txdb, by = "gene"))
gene_range <- unique(gene_range)
save(gene_range, file='/exports/molepi/users/ljsinke/LLS/Shared_Data/allGeneRanges.Rdata)
Load gene_range object
load('/exports/molepi/users/ljsinke/LLS/Shared_Data/allGeneRanges.Rdata')
gene_range
## GRanges object with 302587 ranges and 2 metadata columns:
## seqnames ranges strand | cds_id cds_name
## <Rle> <IRanges> <Rle> | <integer> <character>
## ENSG00000000003 X 99885795-99885863 - | 717267 ENSP00000362111
## ENSG00000000003 X 99887482-99887565 - | 717268 ENSP00000362111
## ENSG00000000003 X 99888402-99888536 - | 717269 ENSP00000362111
## ENSG00000000003 X 99888928-99889026 - | 717270 ENSP00000362111
## ENSG00000000003 X 99890175-99890249 - | 717271 ENSP00000362111
## ... ... ... ... . ... ...
## LRG_97 LRG_97 17272-17334 + | 799400 LRG_97p1
## LRG_97 LRG_97 17876-18035 + | 799401 LRG_97p1
## LRG_97 LRG_97 22463-22593 + | 799402 LRG_97p1
## LRG_98 LRG_98 10293-13424 + | 799403 LRG_98p1
## LRG_99 LRG_99 9069-10652 + | 799404 LRG_99p1
## -------
## seqinfo: 722 sequences (1 circular) from an unspecified genome
Make a GenomicRanges object for the top CpGs
cpg_range <- GRanges(seqnames = top_cpgs$cpg_chr,
IRanges(
start = top_cpgs$cpg_start,
end = top_cpgs$cpg_end,
names = top_cpgs$cpg
))
cpg_range
## GRanges object with 162 ranges and 0 metadata columns:
## seqnames ranges strand
## <Rle> <IRanges> <Rle>
## cg12394201 11 43942417-43942419 *
## cg24161080 18 33889786-33889788 *
## cg05008948 7 99160713-99160715 *
## cg21342383 10 127661991-127661993 *
## cg01668986 8 21541541-21541543 *
## ... ... ... ...
## cg04793673 12 52975919-52975921 *
## cg27528369 7 55201544-55201546 *
## cg03982376 6 149806658-149806660 *
## cg13290921 10 98796304-98796306 *
## cg09563940 7 130873557-130873559 *
## -------
## seqinfo: 22 sequences from an unspecified genome; no seqlengths
Initialize a distance matrix
distance.matrix <- matrix(
NaN,
nrow = length(gene_range),
ncol = length(cpg_range),
dimnames = list(names(gene_range),
names(cpg_range)))
Loop through CpGs
for(i in 1:nrow(top_cpgs)){
cpg <- cpg_range[i]
calc.distance <- distance(
cpg,
gene_range,
ignore.strand = T)
distance.matrix[,i] <- calc.distance
}
dim(distance.matrix)
## [1] 302587 162
distance.matrix <- as.data.frame(distance.matrix)
colnames(distance.matrix) <- names(cpg_range)
distance.matrix$gene <- names(gene_range)
Make a list of nearest genes
gene_list <- lapply(names(cpg_range), function(x){
df <- (distance.matrix %>% dplyr::select(gene, all_of(x)))
df <- df[rowSums(is.na(df)) == 0,]
return(unique(df[df[,2] == min(df[,2]), ]))
})
gene_list[[1]]
## gene cg12394201
## ENSG00000166199.14 ENSG00000166199 856
Save gene symbols
ens2gene <- cinaR::grch37
Bind
df <- data.frame()
for(i in 1:length(gene_list)){
df <- rbind(df,
data.frame(gene_nearest_ens = gene_list[[i]]$gene,
cpg = colnames(gene_list[[i]])[2],
gene_nearest_dist = gene_list[[i]][1,2])
)
}
sym <- ens2gene$symbol[match(df$gene_nearest_ens,
ens2gene$ensgene)]
df$gene_nearest_name <- sym
df <- df[match(cpg_top, df$cpg),]
top_cpgs <- top_cpgs[match(cpg_top, top_cpgs$cpg),]
top_cpgs <- left_join(top_cpgs, df, by = "cpg")
head(top_cpgs)
## cpg beta SE p padj_fdr t N
## 1 cg12394201 -0.06244505 0.008518138 1.400163e-11 1.058211e-05 -6.757889 147
## 2 cg24161080 -0.08385868 0.011676090 3.564446e-11 1.346963e-05 -6.621138 148
## 3 cg05008948 -0.03083088 0.004617073 7.398424e-10 1.863853e-04 -6.157324 148
## 4 cg21342383 -0.01871533 0.002916373 3.257549e-09 4.923961e-04 -5.918063 148
## 5 cg01668986 -0.04349693 0.006753537 2.859493e-09 4.923961e-04 -5.939468 148
## 6 cg13585930 -0.05644199 0.008913697 5.230718e-09 6.588761e-04 -5.839661 148
## cpg_chr cpg_start cpg_end cpg_strand gene_HGNC E107
## 1 11 43942417 43942419 + ALKBH3-AS1;RP11-613D13.4 6_EnhG
## 2 18 33889786 33889788 - FHOD3 7_Enh
## 3 7 99160713 99160715 + GS1-259H13.10;ZNF655 4_Tx
## 4 10 127661991 127661993 - FANK1;FANK1-AS1 15_Quies
## 5 8 21541541 21541543 - <NA> 7_Enh
## 6 10 72027356 72027358 + NPFFR1 14_ReprPCWk
## E108 gene_nearest_ens gene_nearest_dist gene_nearest_name
## 1 6_EnhG ENSG00000166199 856 ALKBH3
## 2 7_Enh ENSG00000134775 11822 FHOD3
## 3 6_EnhG ENSG00000197343 95 ZNF655
## 4 15_Quies ENSG00000203780 6736 FANK1
## 5 7_Enh ENSG00000168546 9246 GFRA2
## 6 14_ReprPCWk ENSG00000148734 1208 NPFFR1
Make DMR data frame
dmr_cpgs <- top_cpgs %>%
dplyr::select(
chromosome = cpg_chr,
start = cpg_start,
padj = padj_fdr)
Create significance indicator
dmr_cpgs <- dmr_cpgs %>% mutate(
crit = ifelse(padj <= 0.05, 1, 0))
Arrange by genomic position
dmr_cpgs <- dmr_cpgs %>%
arrange(chromosome, start) %>%
dplyr::select(chromosome, start, crit)
Initialize variables
chromosome=1:22
MAXIMUM_REGION_LENGTH = 1000
mismatches = 3
Run DMRfinder
for(x in chromosome){
tryCatch({chr1 = dmr_cpgs[dmr_cpgs[,1]==x,]
if(nrow(chr1) >= 1){
chr1 <- chr1 %>% arrange(start)
chr.final = data.frame(
coord = chr1$start,
crit = chr1$crit
)
last_coordinate = length( chr.final$crit )
next_coordinate = 0
for (i in 1:(last_coordinate-1)) {
if ( i>=next_coordinate ) {
if (chr.final$crit[ i ]==1) {
start_location = chr.final$coord[ i ]
last_visited_crit_loc = start_location
sum_of_ones = 1
number_of_items = 1
# start crawling loop
for (j in (i+1):last_coordinate ) {
if (chr.final$coord[ j ] > (last_visited_crit_loc + MAXIMUM_REGION_LENGTH)) { break }
if((number_of_items-sum_of_ones)>mismatches) { break } #Number of mismatches
number_of_items = number_of_items + 1
if (chr.final$crit[j]==1) {
last_visited_crit_loc = chr.final$coord[ j ]
sum_of_ones = sum_of_ones + 1
}
}
# now check if the result is good enough
if (sum_of_ones>=3) {
last_one=i+number_of_items-1
for (k in (i+number_of_items-1):1) {
if ( chr.final$crit[k] == 0 ) {
last_one = last_one - 1
number_of_items = number_of_items - 1
}
else {
break
}
}
cat(x, ';',start_location,";",chr.final$coord[last_one],";",sum_of_ones/number_of_items,"\n")
next_coordinate = last_one + 1
}
}
}
}
}}, error=function(e){})
}
top_cpgs <- top_cpgs %>% arrange(desc(padj_fdr))
save(top_cpgs, file='../GOTO_Data/GOTO_results-top-muscle-adj.Rdata')
write_csv(top_cpgs, file='../GOTO_Data/Tables/ST04.csv')
sessionInfo()
## R version 4.2.2 (2022-10-31)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Rocky Linux 8.10 (Green Obsidian)
##
## Matrix products: default
## BLAS/LAPACK: /usr/lib64/libopenblas-r0.3.15.so
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] parallel stats4 stats graphics grDevices utils datasets
## [8] methods base
##
## other attached packages:
## [1] ggpubr_0.4.0
## [2] GEOquery_2.62.2
## [3] MuSiC_0.2.0
## [4] nnls_1.4
## [5] gplots_3.1.3
## [6] plotly_4.10.1
## [7] SeuratObject_4.1.3
## [8] Seurat_4.3.0
## [9] gridExtra_2.3
## [10] lattice_0.21-8
## [11] bacon_1.22.0
## [12] ellipse_0.4.5
## [13] methylGSA_1.12.0
## [14] sva_3.42.0
## [15] genefilter_1.76.0
## [16] mgcv_1.8-42
## [17] nlme_3.1-162
## [18] limma_3.54.2
## [19] lmerTest_3.1-3
## [20] lme4_1.1-30
## [21] IlluminaHumanMethylationEPICanno.ilm10b4.hg19_0.6.0
## [22] snpStats_1.44.0
## [23] survival_3.5-5
## [24] ggrepel_0.9.1
## [25] ggfortify_0.4.14
## [26] irlba_2.3.5.1
## [27] Matrix_1.5-4.1
## [28] omicsPrint_1.14.0
## [29] MASS_7.3-60
## [30] DNAmArray_2.0.0
## [31] pls_2.8-2
## [32] FDb.InfiniumMethylation.hg19_2.2.0
## [33] org.Hs.eg.db_3.14.0
## [34] TxDb.Hsapiens.UCSC.hg19.knownGene_3.2.2
## [35] GenomicFeatures_1.46.5
## [36] AnnotationDbi_1.56.2
## [37] IlluminaHumanMethylationEPICmanifest_0.3.0
## [38] minfi_1.40.0
## [39] bumphunter_1.36.0
## [40] locfit_1.5-9.8
## [41] iterators_1.0.14
## [42] foreach_1.5.2
## [43] Biostrings_2.62.0
## [44] XVector_0.34.0
## [45] SummarizedExperiment_1.24.0
## [46] Biobase_2.58.0
## [47] MatrixGenerics_1.10.0
## [48] matrixStats_1.0.0
## [49] GenomicRanges_1.46.1
## [50] GenomeInfoDb_1.34.9
## [51] IRanges_2.32.0
## [52] S4Vectors_0.36.2
## [53] BiocGenerics_0.44.0
## [54] BiocParallel_1.32.6
## [55] MethylAid_1.28.0
## [56] forcats_0.5.2
## [57] stringr_1.5.0
## [58] dplyr_1.1.3
## [59] purrr_0.3.4
## [60] readr_2.1.2
## [61] tidyr_1.2.1
## [62] tibble_3.2.1
## [63] ggplot2_3.4.3
## [64] tidyverse_1.3.2
## [65] rmarkdown_2.16
##
## loaded via a namespace (and not attached):
## [1] ica_1.0-3
## [2] Rsamtools_2.10.0
## [3] cinaR_0.2.3
## [4] lmtest_0.9-40
## [5] crayon_1.5.2
## [6] rhdf5filters_1.10.1
## [7] backports_1.4.1
## [8] reprex_2.0.2
## [9] GOSemSim_2.20.0
## [10] rlang_1.1.1
## [11] ROCR_1.0-11
## [12] readxl_1.4.1
## [13] SparseM_1.81
## [14] nloptr_2.0.3
## [15] filelock_1.0.2
## [16] rjson_0.2.21
## [17] bit64_4.0.5
## [18] glue_1.6.2
## [19] sctransform_0.3.5
## [20] rngtools_1.5.2
## [21] spatstat.sparse_3.0-1
## [22] mcmc_0.9-7
## [23] spatstat.geom_3.2-1
## [24] DOSE_3.20.1
## [25] haven_2.5.1
## [26] tidyselect_1.2.0
## [27] fitdistrplus_1.1-11
## [28] XML_3.99-0.14
## [29] zoo_1.8-12
## [30] GenomicAlignments_1.30.0
## [31] MatrixModels_0.5-1
## [32] xtable_1.8-4
## [33] magrittr_2.0.3
## [34] evaluate_0.21
## [35] cli_3.6.1
## [36] zlibbioc_1.44.0
## [37] miniUI_0.1.1.1
## [38] rstudioapi_0.14
## [39] doRNG_1.8.6
## [40] sp_1.6-1
## [41] MultiAssayExperiment_1.20.0
## [42] bslib_0.5.0
## [43] fastmatch_1.1-3
## [44] treeio_1.18.1
## [45] shiny_1.7.2
## [46] xfun_0.39
## [47] askpass_1.1
## [48] multtest_2.50.0
## [49] cluster_2.1.4
## [50] caTools_1.18.2
## [51] tidygraph_1.2.2
## [52] KEGGREST_1.34.0
## [53] quantreg_5.94
## [54] base64_2.0.1
## [55] ape_5.7-1
## [56] scrime_1.3.5
## [57] listenv_0.9.0
## [58] png_0.1-8
## [59] reshape_0.8.9
## [60] future_1.32.0
## [61] withr_2.5.0
## [62] bitops_1.0-7
## [63] ggforce_0.3.4
## [64] plyr_1.8.8
## [65] cellranger_1.1.0
## [66] coda_0.19-4
## [67] pillar_1.9.0
## [68] cachem_1.0.8
## [69] fs_1.6.2
## [70] clusterProfiler_4.2.2
## [71] DelayedMatrixStats_1.16.0
## [72] vctrs_0.6.3
## [73] ellipsis_0.3.2
## [74] generics_0.1.3
## [75] tools_4.2.2
## [76] munsell_0.5.0
## [77] tweenr_2.0.2
## [78] fgsea_1.20.0
## [79] DelayedArray_0.24.0
## [80] abind_1.4-5
## [81] fastmap_1.1.1
## [82] compiler_4.2.2
## [83] httpuv_1.6.11
## [84] rtracklayer_1.54.0
## [85] beanplot_1.3.1
## [86] MCMCpack_1.6-3
## [87] GenomeInfoDbData_1.2.9
## [88] edgeR_3.40.2
## [89] deldir_1.0-9
## [90] utf8_1.2.3
## [91] later_1.3.1
## [92] RobustRankAggreg_1.2.1
## [93] BiocFileCache_2.2.1
## [94] jsonlite_1.8.5
## [95] scales_1.2.1
## [96] carData_3.0-5
## [97] pbapply_1.7-0
## [98] tidytree_0.4.0
## [99] sparseMatrixStats_1.10.0
## [100] lazyeval_0.2.2
## [101] promises_1.2.0.1
## [102] car_3.1-0
## [103] goftest_1.2-3
## [104] spatstat.utils_3.0-3
## [105] reticulate_1.30
## [106] htm2txt_2.2.2
## [107] nor1mix_1.3-0
## [108] cowplot_1.1.1
## [109] statmod_1.5.0
## [110] siggenes_1.68.0
## [111] Rtsne_0.16
## [112] downloader_0.4
## [113] uwot_0.1.14
## [114] igraph_1.4.3
## [115] HDF5Array_1.22.1
## [116] numDeriv_2016.8-1.1
## [117] yaml_2.3.7
## [118] htmltools_0.5.5
## [119] memoise_2.0.1
## [120] BiocIO_1.8.0
## [121] graphlayouts_0.8.1
## [122] quadprog_1.5-8
## [123] viridisLite_0.4.2
## [124] digest_0.6.31
## [125] assertthat_0.2.1
## [126] mime_0.12
## [127] rappdirs_0.3.3
## [128] RSQLite_2.2.17
## [129] yulab.utils_0.0.6
## [130] future.apply_1.11.0
## [131] data.table_1.14.8
## [132] blob_1.2.4
## [133] preprocessCore_1.60.2
## [134] splines_4.2.2
## [135] labeling_0.4.2
## [136] Rhdf5lib_1.20.0
## [137] illuminaio_0.40.0
## [138] googledrive_2.0.0
## [139] RaggedExperiment_1.18.0
## [140] RCurl_1.98-1.12
## [141] broom_1.0.1
## [142] hms_1.1.2
## [143] modelr_0.1.9
## [144] rhdf5_2.42.1
## [145] colorspace_2.1-0
## [146] aplot_0.1.7
## [147] sass_0.4.6
## [148] Rcpp_1.0.10
## [149] mclust_6.0.0
## [150] RANN_2.6.1
## [151] enrichplot_1.14.2
## [152] fansi_1.0.4
## [153] tzdb_0.4.0
## [154] parallelly_1.36.0
## [155] R6_2.5.1
## [156] grid_4.2.2
## [157] ggridges_0.5.4
## [158] lifecycle_1.0.3
## [159] ggsignif_0.6.3
## [160] curl_5.0.1
## [161] googlesheets4_1.0.1
## [162] minqa_1.2.5
## [163] leiden_0.4.3
## [164] jquerylib_0.1.4
## [165] DO.db_2.9
## [166] qvalue_2.26.0
## [167] RcppAnnoy_0.0.20
## [168] RColorBrewer_1.1-3
## [169] spatstat.explore_3.1-0
## [170] htmlwidgets_1.5.4
## [171] polyclip_1.10-4
## [172] biomaRt_2.50.3
## [173] missMethyl_1.28.0
## [174] shadowtext_0.1.2
## [175] timechange_0.2.0
## [176] gridGraphics_0.5-1
## [177] reactome.db_1.77.0
## [178] rvest_1.0.3
## [179] globals_0.16.2
## [180] openssl_2.0.6
## [181] spatstat.random_3.1-5
## [182] patchwork_1.1.2
## [183] progressr_0.13.0
## [184] codetools_0.2-19
## [185] IlluminaHumanMethylation450kanno.ilmn12.hg19_0.6.0
## [186] lubridate_1.9.2
## [187] GO.db_3.14.0
## [188] gtools_3.9.4
## [189] prettyunits_1.1.1
## [190] dbplyr_2.2.1
## [191] gridBase_0.4-7
## [192] gtable_0.3.3
## [193] DBI_1.1.3
## [194] tensor_1.5
## [195] ggfun_0.0.7
## [196] httr_1.4.6
## [197] highr_0.10
## [198] KernSmooth_2.23-21
## [199] stringi_1.7.12
## [200] vroom_1.5.7
## [201] progress_1.2.2
## [202] reshape2_1.4.4
## [203] farver_2.1.1
## [204] annotate_1.72.0
## [205] viridis_0.6.2
## [206] hexbin_1.28.3
## [207] ggtree_3.2.1
## [208] xml2_1.3.4
## [209] boot_1.3-28.1
## [210] restfulr_0.0.15
## [211] scattermore_0.8
## [212] ggplotify_0.1.0
## [213] bit_4.0.5
## [214] spatstat.data_3.0-1
## [215] scatterpie_0.1.8
## [216] ggraph_2.0.6
## [217] pkgconfig_2.0.3
## [218] gargle_1.5.0
## [219] rstatix_0.7.0
## [220] knitr_1.43
Clear
rm(list=ls())