This script compares measured LLS genotypes to those predicted from DNAm data to check for sample mixups.
Load packages
library(tidyverse)
library(snpStats)
Read in the LLS genotyping files
lls_plink <- read.plink(
bed = '../GOTO_Data/Processing/Genotypes/LLS_Offspring_Partners_Final_36_130_Overlap.bed',
bim = '../GOTO_Data/Processing/Genotypes/LLS_Offspring_Partners_Final_36_130_Overlap.bim',
fam = '../GOTO_Data/Processing/Genotypes/LLS_Offspring_Partners_Final_36_130_Overlap.fam')
Read in the results from omicsPrint (genotyping from DNA methylation values in each of the 3 tissues)
Blood
load('../GOTO_Data/Processing/omicsPrint/GOTO_omicsPrint-blood.Rdata')
dnam_blood <- as.data.frame(genotype)
rm(list = c('mismatches', 'out', 'relations', 'genotype'))
print(paste0("We have data on ",
nrow(dnam_blood), " SNPs from ",
ncol(dnam_blood), " fasted blood samples"))
## [1] "We have data on 1230 SNPs from 200 fasted blood samples"
Muscle
load('../GOTO_Data/Processing/omicsPrint/GOTO_omicsPrint-muscle.Rdata')
dnam_muscle <- as.data.frame(genotype)
rm(list = c('mismatches', 'out', 'relations', 'genotype'))
print(paste0("We have data on ",
nrow(dnam_muscle), " SNPs from ",
ncol(dnam_muscle), " skeletal muscle samples"))
## [1] "We have data on 1010 SNPs from 164 skeletal muscle samples"
Fat
load('../GOTO_Data/Processing/omicsPrint/GOTO_omicsPrint-fat.Rdata')
dnam_fat <- as.data.frame(genotype)
rm(list = c('mismatches', 'out', 'relations', 'genotype'))
print(paste0("We have data on ",
nrow(dnam_fat), " SNPs from ",
ncol(dnam_fat), " adipose tissue samples"))
## [1] "We have data on 1059 SNPs from 184 adipose tissue samples"
Read in key file sent from M.B.
key_id_gwas <- read_csv('../GOTO_Data/Processing/Genotypes/GOTO_GWASid-IOP2id_20210211.csv')
## Rows: 164 Columns: 3
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): GWASnr
## dbl (2): GOT, IOP2_ID
##
## ℹ 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.
GWASnr needs formatting as in the genotype data there is no LLS prefix and only a single underscore
key_id_gwas$GWASnr <- sub('LLS', '', sub('__', '_', key_id_gwas$GWASnr))
Read in the targets file of the methylation data to link sample IDs to other IDs
load('../GOTO_Data/Processing/GOTO_targets-unfiltered.Rdata')
key_id_dnam <- targets
rm('targets')
Save a sample ID key for each set of samples:
200 blood samples
key_blood <- key_id_dnam %>% dplyr::select(sample_ID = Basename,
IOP2_ID,
HMU_ID,
DNA_labnr) %>%
filter(sample_ID %in% colnames(dnam_blood)) %>%
mutate(IOP2_ID = as.numeric(as.character(IOP2_ID)))
key_blood <- left_join(key_blood, key_id_gwas, by = 'IOP2_ID')
164 muscle samples
key_muscle <- key_id_dnam %>% dplyr::select(sample_ID = Basename,
IOP2_ID,
HMU_ID,
DNA_labnr) %>%
filter(sample_ID %in% colnames(dnam_muscle)) %>%
mutate(IOP2_ID = as.numeric(as.character(IOP2_ID)))
key_muscle <- left_join(key_muscle, key_id_gwas, by = 'IOP2_ID')
184 fat samples
key_fat <- key_id_dnam %>% dplyr::select(sample_ID = Basename,
IOP2_ID,
HMU_ID,
DNA_labnr) %>%
filter(sample_ID %in% colnames(dnam_fat)) %>%
mutate(IOP2_ID = as.numeric(as.character(IOP2_ID)))
key_fat <- left_join(key_fat, key_id_gwas, by = 'IOP2_ID')
Save
save(key_blood, key_muscle, key_fat, file = '../GOTO_Data/Processing/Genotypes/GOTO_data-keys.Rdata')
rm(list = c('key_id_gwas', 'key_id_dnam'))
Load in mapping file from Zhou
cpg_snp <- read_tsv(
"/exports/molepi/users/ljsinke/LLS/Shared_Data/Manifests/EPIC.hg38.commonsnp.tsv")
dim(cpg_snp)
## [1] 667132 111
Save only CpGs that map to a single SNP
cpg_snp <- cpg_snp %>% dplyr::select(cpg=probeID, snpID)
cpg_snp <- cpg_snp %>% group_by(cpg) %>%
mutate(n = n()) %>% ungroup() %>% filter(n == 1) %>% dplyr::select(-n)
Merge with the beta2genotype data
595 CpGs in blood data map to only 1 SNP
dnam_blood <- dnam_blood %>% rownames_to_column(var = 'cpg')
dim(dnam_blood)
## [1] 1230 201
dnam_blood <- inner_join(cpg_snp, dnam_blood, by = 'cpg')
dim(dnam_blood)
## [1] 595 202
488 CpGs in muscle data map to only 1 SNP
dnam_muscle <- dnam_muscle %>% rownames_to_column(var = 'cpg')
dim(dnam_muscle)
## [1] 1010 165
dnam_muscle <- inner_join(cpg_snp, dnam_muscle, by = 'cpg')
dim(dnam_muscle)
## [1] 488 166
508 CpGs in fat data map to only 1 SNP
dnam_fat <- dnam_fat %>% rownames_to_column(var = 'cpg')
dim(dnam_fat)
## [1] 1059 185
dnam_fat <- inner_join(cpg_snp, dnam_fat, by = 'cpg')
dim(dnam_fat)
## [1] 508 186
48 individuals were not part of LLS but participated in GOTO. These individuals have genotypes in a different dataset. We remove their samples from the beta2genotype data, but keep them in the next script.
The rownames of the genotype data have a . where the GWASnr has an underscore.
rownames(lls_plink$genotypes) <- gsub('.', '_',
rownames(lls_plink$genotypes), fixed=TRUE)
First we subset the keys
Blood
key_blood <- key_blood %>% filter(GWASnr %in% rownames(lls_plink$genotypes))
Muscle
key_muscle <- key_muscle %>% filter(GWASnr %in% rownames(lls_plink$genotypes))
Fat
key_fat <- key_fat %>% filter(GWASnr %in% rownames(lls_plink$genotypes))
Now we can subset the beta2genotype data using these keys
Final blood data of 595 CpGs from 156 samples
dnam_blood <- dnam_blood %>% dplyr::select(cpg, snpID, key_blood$sample_ID)
dim(dnam_blood)
## [1] 595 156
Final muscle data of 488 CpGs from 136 samples
dnam_muscle <- dnam_muscle %>% dplyr::select(cpg, snpID, key_muscle$sample_ID)
dim(dnam_muscle)
## [1] 488 136
Final fat data of 508 CpGs from 142 samples
dnam_fat <- dnam_fat %>% dplyr::select(cpg, snpID, key_fat$sample_ID)
dim(dnam_fat)
## [1] 508 142
Now we can use the finalized beta2genotype data to subset the genotype data, which contains data on 302806 SNPs from 2489 individuals.
lls_plink <- as.data.frame(t(lls_plink$genotypes))
dim(lls_plink)
## [1] 302806 2489
56 / 595 SNPs for blood found in the genotype data from 78 people
genotype_blood <- lls_plink %>% dplyr::select(key_blood$GWASnr) %>%
rownames_to_column(var = 'snpID') %>%
filter(snpID %in% dnam_blood$snpID) %>% arrange(snpID)
dim(genotype_blood)
## [1] 56 78
41 / 488 SNPs for muscle found in the genotype data from 68 people
genotype_muscle <- lls_plink %>% dplyr::select(key_muscle$GWASnr) %>%
rownames_to_column(var = 'snpID') %>%
filter(snpID %in% dnam_muscle$snpID) %>% arrange(snpID)
dim(genotype_muscle)
## [1] 41 68
50 / 508 SNPs for fat found in the genotype data from 71 people
genotype_fat <- lls_plink %>% dplyr::select(key_fat$GWASnr) %>%
rownames_to_column(var = 'snpID') %>%
filter(snpID %in% dnam_fat$snpID) %>% arrange(snpID)
dim(genotype_fat)
## [1] 50 71
beta2genotype for SNPsFinally we keep only the SNPs that overlap with genotype data
56 single SNP CpGs from 156 blood samples
dnam_blood <- dnam_blood %>% filter(snpID %in% genotype_blood$snpID) %>% arrange(snpID)
dim(dnam_blood)
## [1] 56 156
41 single SNP CpGs from 136 muscle samples
dnam_muscle <- dnam_muscle %>% filter(snpID %in% genotype_muscle$snpID) %>% arrange(snpID)
dim(dnam_muscle)
## [1] 41 136
50 single SNP CpGs from 142 fat samples
dnam_fat <- dnam_fat %>% filter(snpID %in% genotype_fat$snpID) %>% arrange(snpID)
dim(dnam_fat)
## [1] 50 142
The genotype data needs to be converted to numeric
genotype_blood[, c(2:ncol(genotype_blood))] <- sapply(genotype_blood[, c(2:ncol(genotype_blood))], as.numeric)
genotype_muscle[, c(2:ncol(genotype_muscle))] <- sapply(genotype_muscle[, c(2:ncol(genotype_muscle))], as.numeric)
genotype_fat[, c(2:ncol(genotype_fat))] <- sapply(genotype_fat[, c(2:ncol(genotype_fat))], as.numeric)
Create a data frame of assumed and actual matches for each sample
dnam <- dnam_blood
gwas <- genotype_blood
key <- key_blood
out_blood <- data.frame()
for(j in 3:ncol(dnam)){
ind <- dnam[,j]
for(i in 2:ncol(gwas)){
out_blood <- rbind(out_blood,
data.frame(sample_ID = (colnames(dnam)[j]),
actual_match = colnames(gwas)[i],
assumed_match = key[key$sample_ID == colnames(dnam)[j],6],
n_snps = data.frame(xtabs(~gwas[,i] == ind))[2,2]))
}
}
out <- out_blood %>%
group_by(sample_ID) %>%
mutate(max = max(n_snps)) %>% ungroup()
We visualize the results. For every sample the assumed match also has the most matching SNPs, suggesting no sample mixups for blood.
out %>% ggplot(aes(x = sample_ID, y = n_snps)) +
geom_point(fill = ifelse(out$actual_match == out$assumed_match,
'yellow', 'grey60'),
color = ifelse(out$n_snps == out$max,
'red', 'grey60'),
shape = 21, size = 2) +
theme_bw() +
ylab('Number of matching SNPs \n') + xlab('Sample ID') +
ggtitle('Comparison of genotypes for all sample-person pairs') +
theme(axis.text.x = element_text(angle = 90),
panel.background = element_rect(fill = 'white'),
axis.text.x.bottom = element_blank(),
panel.grid = element_blank(),
axis.title = element_text(size = 16),
title = element_text(size = 14),
axis.text.y = element_text(size = 14)) +
scale_x_discrete(expand = c(-1.01,-1.01))
The smallest overlap is 41 SNPs and as shown above, all samples have the highest match with the assumed match based on genotype.
out %>% filter(n_snps == max) %>% arrange(max)
## # A tibble: 154 × 5
## sample_ID actual_match assumed_match n_snps max
## <chr> <chr> <chr> <int> <int>
## 1 203548970103_R01C01 43_1_1c4 43_1_1c4 41 41
## 2 203548970103_R02C01 43_1_1c4 43_1_1c4 43 43
## 3 203548970004_R01C01 218_1_1c2 218_1_1c2 44 44
## 4 203548970004_R02C01 218_1_1c2 218_1_1c2 44 44
## 5 203548970040_R01C01 397_1_2c6s 397_1_2c6s 45 45
## 6 203548970040_R02C01 397_1_2c6s 397_1_2c6s 45 45
## 7 203548870093_R03C01 15_1_2c7 15_1_2c7 45 45
## 8 203548870093_R04C01 15_1_2c7 15_1_2c7 45 45
## 9 203548980012_R01C01 200_1_5c3 200_1_5c3 45 45
## 10 203548980012_R02C01 200_1_5c3 200_1_5c3 45 45
## # ℹ 144 more rows
out %>% filter(n_snps == max) %>% filter(actual_match != assumed_match)
## # A tibble: 0 × 5
## # ℹ 5 variables: sample_ID <chr>, actual_match <chr>, assumed_match <chr>,
## # n_snps <int>, max <int>
Save
save(out, key_blood, file='../GOTO_Data/Processing/Genotypes/GOTO_genotypeCheck-LLS-blood.Rdata')
Create a data frame of assumed and actual matches for each sample
dnam <- dnam_muscle
gwas <- genotype_muscle
key <- key_muscle
out_muscle <- data.frame()
for(j in 3:ncol(dnam)){
ind <- dnam[,j]
for(i in 2:ncol(gwas)){
out_muscle <- rbind(out_muscle,
data.frame(sample_ID = (colnames(dnam)[j]),
actual_match = colnames(gwas)[i],
assumed_match = key[key$sample_ID == colnames(dnam)[j],6],
n_snps = data.frame(xtabs(~gwas[,i] == ind))[2,2]))
}
}
out <- out_muscle %>% group_by(sample_ID) %>% mutate(max = max(n_snps)) %>% ungroup()
We visualize the results.
out %>% ggplot(aes(x = sample_ID, y = n_snps)) +
geom_point(fill = ifelse(out$actual_match == out$assumed_match,
'yellow', 'grey60'),
color = ifelse(out$n_snps == out$max,
'red', 'grey60'),
shape = 21, size = 2) +
theme_bw() +
ylab('Number of matching SNPs \n') + xlab('Sample ID') +
ggtitle('Comparison of genotypes for all sample-person pairs') +
theme(axis.text.x = element_text(angle = 90),
panel.background = element_rect(fill = 'white'),
axis.text.x.bottom = element_blank(),
panel.grid = element_blank(),
axis.title = element_text(size = 16),
title = element_text(size = 14),
axis.text.y = element_text(size = 14)) +
scale_x_discrete(expand = c(-1.01,-1.01))
The smallest overlap is 29 SNPs and two samples have been switched. This confirms what we saw with omicsPrint.
out %>% filter(n_snps == max) %>% arrange(max)
## # A tibble: 134 × 5
## sample_ID actual_match assumed_match n_snps max
## <chr> <chr> <chr> <int> <int>
## 1 203548970101_R08C01 38_1_1c6s 38_1_1c6s 29 29
## 2 203527980015_R01C01 349_1_7c16 349_1_7c16 32 32
## 3 203527980015_R02C01 349_1_7c16 349_1_7c16 32 32
## 4 203527980082_R03C01 15_1_2c7 15_1_2c7 33 33
## 5 203527980082_R04C01 15_1_2c7 15_1_2c7 33 33
## 6 203548870077_R02C01 138_1_3c4 138_1_3c4 33 33
## 7 203548870019_R08C01 246_1_2c6 246_1_2c6 33 33
## 8 203548970101_R07C01 38_1_1c6s 38_1_1c6s 34 34
## 9 203548970103_R05C01 14_1_1c6 14_1_1c6 34 34
## 10 203548970103_R06C01 14_1_1c6 14_1_1c6 34 34
## # ℹ 124 more rows
out %>% filter(n_snps == max) %>% filter(actual_match != assumed_match)
## # A tibble: 2 × 5
## sample_ID actual_match assumed_match n_snps max
## <chr> <chr> <chr> <int> <int>
## 1 203548970088_R08C01 58_1_1c5 58_1_1c5s 35 35
## 2 203548980011_R03C01 58_1_1c5s 58_1_1c5 36 36
Save
save(out, key_muscle, file='../GOTO_Data/Processing/Genotypes/GOTO_genotypeCheck-LLS-muscle.Rdata')
Create a data frame of assumed and actual matches for each sample
dnam <- dnam_fat
gwas <- genotype_fat
key <- key_fat
out_fat <- data.frame()
for(j in 3:ncol(dnam)){
ind <- dnam[,j]
for(i in 2:ncol(gwas)){
out_fat <- rbind(out_fat,
data.frame(sample_ID = (colnames(dnam)[j]),
actual_match = colnames(gwas)[i],
assumed_match = key[key$sample_ID == colnames(dnam)[j],6],
n_snps = data.frame(xtabs(~gwas[,i] == ind))[2,2]))
}
}
out <- out_fat %>% group_by(sample_ID) %>% mutate(max = max(n_snps)) %>% ungroup()
We visualize the results.
out %>% ggplot(aes(x = sample_ID, y = n_snps)) +
geom_point(fill = ifelse(out$actual_match == out$assumed_match,
'yellow', 'grey60'),
color = ifelse(out$n_snps == out$max,
'red', 'grey60'),
shape = 21, size = 2) +
theme_bw() +
ylab('Number of matching SNPs \n') + xlab('Sample ID') +
ggtitle('Comparison of genotypes for all sample-person pairs') +
theme(axis.text.x = element_text(angle = 90),
panel.background = element_rect(fill = 'white'),
axis.text.x.bottom = element_blank(),
panel.grid = element_blank(),
axis.title = element_text(size = 16),
title = element_text(size = 14),
axis.text.y = element_text(size = 14)) +
scale_x_discrete(expand = c(-1.01,-1.01))
The smallest overlap is 29 SNPs and one sample is not from the assumed individual. We will have to drop this sample and its pair.
out %>% filter(n_snps == max) %>% arrange(max)
## # A tibble: 140 × 5
## sample_ID actual_match assumed_match n_snps max
## <chr> <chr> <chr> <int> <int>
## 1 203548970042_R05C01 349_1_7c11 349_1_7c7s 29 29
## 2 203548970100_R08C01 159_1_3c22s 159_1_3c22s 35 35
## 3 203548970098_R07C01 397_1_2c6s 397_1_2c6s 39 39
## 4 203548970098_R08C01 397_1_2c6s 397_1_2c6s 39 39
## 5 203548970100_R01C01 218_1_1c2 218_1_1c2 40 40
## 6 203548970100_R02C01 218_1_1c2 218_1_1c2 40 40
## 7 203740910037_R05C01 461_1_2c4s 461_1_2c4s 40 40
## 8 203740910037_R06C01 461_1_2c4s 461_1_2c4s 40 40
## 9 203527980080_R03C01 138_1_3c4 138_1_3c4 41 41
## 10 203548980032_R03C01 43_1_1c4 43_1_1c4 41 41
## # ℹ 130 more rows
out %>% filter(n_snps == max) %>% filter(actual_match != assumed_match)
## # A tibble: 1 × 5
## sample_ID actual_match assumed_match n_snps max
## <chr> <chr> <chr> <int> <int>
## 1 203548970042_R05C01 349_1_7c11 349_1_7c7s 29 29
Save
save(out, key_fat, file='../GOTO_Data/Processing/Genotypes/GOTO_genotypeCheck-LLS-fat.Rdata')
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] snpStats_1.44.0
## [2] survival_3.5-5
## [3] ggrepel_0.9.1
## [4] ggfortify_0.4.14
## [5] irlba_2.3.5.1
## [6] Matrix_1.5-4.1
## [7] omicsPrint_1.14.0
## [8] MASS_7.3-60
## [9] DNAmArray_2.0.0
## [10] pls_2.8-2
## [11] FDb.InfiniumMethylation.hg19_2.2.0
## [12] org.Hs.eg.db_3.14.0
## [13] TxDb.Hsapiens.UCSC.hg19.knownGene_3.2.2
## [14] GenomicFeatures_1.46.5
## [15] AnnotationDbi_1.56.2
## [16] IlluminaHumanMethylationEPICmanifest_0.3.0
## [17] minfi_1.40.0
## [18] bumphunter_1.36.0
## [19] locfit_1.5-9.8
## [20] iterators_1.0.14
## [21] foreach_1.5.2
## [22] Biostrings_2.62.0
## [23] XVector_0.34.0
## [24] SummarizedExperiment_1.24.0
## [25] Biobase_2.58.0
## [26] MatrixGenerics_1.10.0
## [27] matrixStats_1.0.0
## [28] GenomicRanges_1.46.1
## [29] GenomeInfoDb_1.34.9
## [30] IRanges_2.32.0
## [31] S4Vectors_0.36.2
## [32] BiocGenerics_0.44.0
## [33] BiocParallel_1.32.6
## [34] MethylAid_1.28.0
## [35] forcats_0.5.2
## [36] stringr_1.5.0
## [37] dplyr_1.1.3
## [38] purrr_0.3.4
## [39] readr_2.1.2
## [40] tidyr_1.2.1
## [41] tibble_3.2.1
## [42] ggplot2_3.4.3
## [43] tidyverse_1.3.2
## [44] rmarkdown_2.16
##
## loaded via a namespace (and not attached):
## [1] utf8_1.2.3 tidyselect_1.2.0
## [3] RSQLite_2.2.17 grid_4.2.2
## [5] munsell_0.5.0 codetools_0.2-19
## [7] preprocessCore_1.60.2 withr_2.5.0
## [9] colorspace_2.1-0 filelock_1.0.2
## [11] highr_0.10 knitr_1.43
## [13] rstudioapi_0.14 labeling_0.4.2
## [15] GenomeInfoDbData_1.2.9 farver_2.1.1
## [17] bit64_4.0.5 rhdf5_2.42.1
## [19] vctrs_0.6.3 generics_0.1.3
## [21] xfun_0.39 timechange_0.2.0
## [23] BiocFileCache_2.2.1 R6_2.5.1
## [25] illuminaio_0.40.0 bitops_1.0-7
## [27] rhdf5filters_1.10.1 cachem_1.0.8
## [29] reshape_0.8.9 DelayedArray_0.24.0
## [31] assertthat_0.2.1 vroom_1.5.7
## [33] promises_1.2.0.1 BiocIO_1.8.0
## [35] scales_1.2.1 googlesheets4_1.0.1
## [37] gtable_0.3.3 rlang_1.1.1
## [39] genefilter_1.76.0 splines_4.2.2
## [41] rtracklayer_1.54.0 gargle_1.5.0
## [43] GEOquery_2.62.2 htm2txt_2.2.2
## [45] hexbin_1.28.3 broom_1.0.1
## [47] yaml_2.3.7 reshape2_1.4.4
## [49] RaggedExperiment_1.18.0 modelr_0.1.9
## [51] backports_1.4.1 httpuv_1.6.11
## [53] tools_4.2.2 gridBase_0.4-7
## [55] nor1mix_1.3-0 ellipsis_0.3.2
## [57] jquerylib_0.1.4 RColorBrewer_1.1-3
## [59] siggenes_1.68.0 MultiAssayExperiment_1.20.0
## [61] Rcpp_1.0.10 plyr_1.8.8
## [63] sparseMatrixStats_1.10.0 progress_1.2.2
## [65] zlibbioc_1.44.0 RCurl_1.98-1.12
## [67] prettyunits_1.1.1 openssl_2.0.6
## [69] haven_2.5.1 fs_1.6.2
## [71] magrittr_2.0.3 data.table_1.14.8
## [73] reprex_2.0.2 googledrive_2.0.0
## [75] hms_1.1.2 mime_0.12
## [77] evaluate_0.21 xtable_1.8-4
## [79] XML_3.99-0.14 mclust_6.0.0
## [81] readxl_1.4.1 gridExtra_2.3
## [83] compiler_4.2.2 biomaRt_2.50.3
## [85] crayon_1.5.2 htmltools_0.5.5
## [87] later_1.3.1 tzdb_0.4.0
## [89] lubridate_1.9.2 DBI_1.1.3
## [91] dbplyr_2.2.1 rappdirs_0.3.3
## [93] cli_3.6.1 quadprog_1.5-8
## [95] pkgconfig_2.0.3 GenomicAlignments_1.30.0
## [97] xml2_1.3.4 annotate_1.72.0
## [99] bslib_0.5.0 rngtools_1.5.2
## [101] multtest_2.50.0 beanplot_1.3.1
## [103] rvest_1.0.3 doRNG_1.8.6
## [105] scrime_1.3.5 digest_0.6.31
## [107] base64_2.0.1 cellranger_1.1.0
## [109] DelayedMatrixStats_1.16.0 restfulr_0.0.15
## [111] curl_5.0.1 shiny_1.7.2
## [113] Rsamtools_2.10.0 rjson_0.2.21
## [115] lifecycle_1.0.3 nlme_3.1-162
## [117] jsonlite_1.8.5 Rhdf5lib_1.20.0
## [119] askpass_1.1 limma_3.54.2
## [121] fansi_1.0.4 pillar_1.9.0
## [123] lattice_0.21-8 KEGGREST_1.34.0
## [125] fastmap_1.1.1 httr_1.4.6
## [127] glue_1.6.2 png_0.1-8
## [129] bit_4.0.5 stringi_1.7.12
## [131] sass_0.4.6 HDF5Array_1.22.1
## [133] blob_1.2.4 memoise_2.0.1
Clear
rm(list=ls())