In this document, we introduce the purpose of the
curatedAdipoRNA
package, its contents and its potential use
cases. This package is a curated dataset of RNA-Seq samples. The samples
are MDI-induced pre-phagocytes (3T3-L1) at different time points/stage
of differentiation. The package document the data collection,
pre-processing and processing. In addition to the documentation, the
package contains the scripts that was used to generated the data in
inst/scripts/
and the final
RangedSummarizedExperiment
object in
data/
.
curatedAdipoRNA
?It is an R package for documenting and distributing a curated dataset. The package doesn’t contain any R functions.
curatedAdipoRNA
?The package contains two different things:
inst/scripts
RangedSummarizedExperiment
object in
data/
curatedAdipoRNA
for?The RangedSummarizedExperiment
object contains the
adipo_counts
, colData
, rowRanges
and metadata
which can be used for the purposes of
conducting differential expression or gene set enrichment analysis on
the cell line model.
The curatedAdipoRNA
package can be installed from
Bioconductor using BiocManager
.
The pre-processing and processing of the data setup environment is
available as a docker
image. This image is also suitable
for reproducing this document. The docker
image can be
obtained using the docker
CLI client.
$ docker pull bcmslab/adiporeg_rna:latest
curatedAdipoRNA
The term “3T3-L1” was used to search the NCBI SRA repository. The results were sent to the run selector. 1,176 runs were viewed. The runs were faceted by Assay Type and the “rna-seq” which resulted in 323 runs. Only 98 samples from 16 different studies were included after being manually reviewed to fit the following criteria: * The raw data is available from GEO and has a GEO identifier (GSM#) * The raw data is linked to a published publicly available article * The protocols for generating the data sufficiently describe the origin of the cell line, the differentiation medium and the time points when the samples were collected. * In case the experimental designs included treatment other than the differentiation medias, the control (non-treated) samples were included.
Note: The data quality and the platform discrepancies are not included in these criteria.
The scripts to download and process the raw data are located in
inst/scripts/
and are glued together to run sequentially by
the GNU make file Makefile
. The following is basically a
description of the recipes in the Makefile
with emphasis on
the software versions, options, inputs and outputs.
download_fastq
wget
(1.18)run.csv
, the URLs column*.fastq.gz
-N
make_index
hisat2-build
(2.0.5)*.bt2
bowtie2 index for the mouse genomeget_annotation
wget
(1.18)annotation.gtf
-N
align_reads
hisat2
(2.0.5)*.fastq.gz
and mm10/
bowtie2 index
for the mouse genome*.sam
count_features
featureCounts
(1.5.1)*.bam
and the annotation gtf
file
for the mm10 mouse genome.*.txt
fastqc
fastqc
(0.11.5)*.fastq.gz
and *.sam
*_fastqc.zip
The aim of this step is to construct a self-contained object with minimal manipulations of the pre-processed data followed by simple a simple exploration of the data in the next section.
make_object
The required steps to make this object from the pre-processed data
are documented in the script and are supposed to be fully reproducible
when run through this package. The output is a
RangedSummarizedExperiment
object containing the gene
counts and the phenotype and features data and metadata.
The RangedSummarizedExperiment
contains * The gene
counts matrix gene_counts
* The phenotype data
colData
* The feature data rowRanges
* The
metadata metadata
which contains a data.frame
of the studies from which the samples were collected.
adipo_counts
objectIn this section, we conduct a simple exploration of the data objects to show the content of the package and how they can be loaded and used.
# loading required libraries
library(curatedAdipoRNA)
#> Warning: replacing previous import 'S4Arrays::read_block' by
#> 'DelayedArray::read_block' when loading 'SummarizedExperiment'
library(SummarizedExperiment)
library(S4Vectors)
library(fastqcr)
library(DESeq2)
library(dplyr)
library(tidyr)
library(ggplot2)
# load data
data("adipo_counts")
# print object
adipo_counts
#> class: RangedSummarizedExperiment
#> dim: 23916 98
#> metadata(1): studies
#> assays(1): gene_counts
#> rownames(23916): 0610005C13Rik 0610007P14Rik ... a l7Rn6
#> rowData names(1): gene_id
#> colnames(98): GSM1224676 GSM1224677 ... GSM873963 GSM873964
#> colData names(14): id study ... instrument_model qc
The count matrix can be accessed using assay
. Here we
show the first five entries of the first five samples.
# print count matrix
assay(adipo_counts)[1:5, 1:5]
#> GSM1224676 GSM1224677 GSM1224678 GSM1224679 GSM1224680
#> 0610005C13Rik 45 36 66 76 19
#> 0610007P14Rik 7327 7899 4819 4140 4884
#> 0610009B22Rik 1576 1805 2074 1669 2443
#> 0610009L18Rik 198 161 236 172 51
#> 0610009O20Rik 4195 4713 4996 4663 4133
The phenotype/samples data is a data.frame
, It can be
accessed using colData
. The time
and
stage
columns encode the time point in hours and stage of
differentiation respectively.
# names of the coldata object
names(colData(adipo_counts))
#> [1] "id" "study" "pmid" "time"
#> [5] "stage" "bibtexkey" "run" "submission"
#> [9] "sample" "experiment" "study_name" "library_layout"
#> [13] "instrument_model" "qc"
# table of times column
table(colData(adipo_counts)$time)
#>
#> -96 -48 0 1 2 4 6 10 24 28 48 96 120 144 168 192 240
#> 1 6 22 1 3 9 1 2 8 1 12 2 1 4 13 8 4
# table of stage column
table(colData(adipo_counts)$stage)
#>
#> 0 1 2 3
#> 29 35 4 30
Other columns in colData
are selected information about
the samples/runs or identifiers to different databases. The following
table provides the description of each of these columns.
col_name | description |
---|---|
id | The GEO sample identifier. |
study | The SRA study identifier. |
pmid | The PubMed ID of the article where the data were published originally. |
time | The time point of the sample when collected in hours. The time is recorded from the beginning of the protocol as 0 hours. |
stage | The stage of differentiation of the sample when collected. Possible values are 0 to 3; 0 for non-differentiated; 1 for differentiating; and 2/3 for maturating samples. |
bibtexkey | The key of the study where the data were published originally. This maps to the studies object of the metadata which records the study information in bibtex format. |
run | The SRA run identifier. |
submission | The SRA study submission identifier. |
sample | The SRA sample identifier. |
experiment | The SRA experiment identifier. |
study_name | The GEO study/series identifier. |
library_layout | The type of RNA library. Possible values are SINGLE for single-end and PAIRED for paired-end runs. |
instrument_model | The name of the sequencing machine that was used to obtain the sequence reads. |
qc | The quality control output of fastqc on the separate files/runs. |
Using the identifiers in colData
along with Bioconductor
packages such as GEOmetabd
and/or SRAdb
gives access to the sample metadata as submitted by the authors or
recorded in the data repositories.
The features data are a GRanges
object and can be
accessed using rowRanges
.
# print GRanges object
rowRanges(adipo_counts)
#> GRanges object with 23916 ranges and 1 metadata column:
#> seqnames ranges strand | gene_id
#> <Rle> <IRanges> <Rle> | <character>
#> 0610005C13Rik chr7 45567795-45575176 - | 0610005C13Rik
#> 0610007P14Rik chr12 85815455-85824545 - | 0610007P14Rik
#> 0610009B22Rik chr11 51685385-51688634 - | 0610009B22Rik
#> 0610009L18Rik chr11 120348678-120351190 + | 0610009L18Rik
#> 0610009O20Rik chr18 38250249-38262629 + | 0610009O20Rik
#> ... ... ... ... . ...
#> Zyx chr6 42349828-42360213 + | Zyx
#> Zzef1 chr11 72796226-72927120 + | Zzef1
#> Zzz3 chr3 152396003-152462826 + | Zzz3
#> a chr2 155013570-155051012 + | a
#> l7Rn6 chr7 89918685-89941204 - | l7Rn6
#> -------
#> seqinfo: 35 sequences from an unspecified genome; no seqlengths
qc
is a column of colData
it is a list of
lists. Each entry in the list correspond to one sample. Each sample has
one or more objects of qc_read
class. The reason for that
is because paired-end samples has two separate files on which
fastqc
quality control were ran.
# show qc data
adipo_counts$qc
#> List of length 98
#> names(98): GSM1224676 GSM1224677 GSM1224678 ... GSM873962 GSM873963 GSM873964
# show the class of the first entry in qc
class(adipo_counts$qc[[1]][[1]])
#> [1] "list" "qc_read"
The metadata is a list of one object. studies
is a
data.frame
containing the bibliography information of the
studies from which the data were collected. Here we show the first entry
in studies
.
# print data of first study
metadata(adipo_counts)$studies[1,]
#> # A tibble: 1 × 37
#> CATEGORY BIBTEXKEY ADDRESS ANNOTE AUTHOR BOOKTITLE CHAPTER CROSSREF EDITION
#> <chr> <chr> <chr> <chr> <list> <chr> <chr> <chr> <chr>
#> 1 ARTICLE Brier2017 <NA> <NA> <chr> <NA> <NA> <NA> <NA>
#> # ℹ 28 more variables: EDITOR <list>, HOWPUBLISHED <chr>, INSTITUTION <chr>,
#> # JOURNAL <chr>, KEY <chr>, MONTH <chr>, NOTE <chr>, NUMBER <chr>,
#> # ORGANIZATION <chr>, PAGES <chr>, PUBLISHER <chr>, SCHOOL <chr>,
#> # SERIES <chr>, TITLE <chr>, TYPE <chr>, VOLUME <chr>, YEAR <dbl>,
#> # ABSTRACT <chr>, ARCHIVEPREFIX <chr>, ARXIVID <chr>, DOI <chr>,
#> # EPRINT <chr>, ISBN <chr>, ISSN <chr>, PMID <chr>, FILE <lgl>,
#> # KEYWORDS <chr>, URL <chr>
GEO series ID | PubMed ID | Num. of Samples | Time (hr) | Differentiation Stage | Instrument Model |
---|---|---|---|---|---|
GSE100056 | 29138456 | 4 | -48/24 | 0/1 | Ion Torrent Proton |
GSE104508 | 29091029 | 3 | 192 | 3 | NextSeq 500 |
GSE35724 | 24095730 | 3 | 192 | 3 | Illumina Genome Analyzer II |
GSE50612 | 25614607 | 8 | -48/0/10/144 | 0/1/3 | Illumina HiSeq 2000 |
GSE50934 | 24912735 | 6 | 0/168 | 0/3 | Illumina HiSeq 2000 |
GSE53244 | 25412662 | 5 | -48/0/48/120/240 | 0/1/3 | Illumina HiSeq 2000 |
GSE57415 | 24857666 | 4 | 0/4 | 0/1 | Illumina HiSeq 1500 |
GSE60745 | 26220403 | 12 | 0/24/48 | 0/1 | Illumina HiSeq 2500 |
GSE64757 | 25596527 | 6 | 168 | 3 | Illumina HiSeq 2000 |
GSE75639 | 27923061 | 6 | -96/-48/0/6/48/168 | 0/1/3 | Illumina HiSeq 2000 |
GSE84410 | 27899593 | 6 | 0/4/48/28 | 0/1 | Illumina HiSeq 1500 |
GSE87113 | 27777310 | 6 | 0/1/2/4/48/168 | 0/1/3 | Illumina HiSeq 2500 |
GSE89621 | 28009298 | 3 | 240 | 3 | Illumina HiSeq 2500 |
GSE95029 | 29317436 | 10 | 0/48/96/144/192 | 0/1/2/3 | Illumina HiSeq 2000 |
GSE95533 | 28475875 | 10 | 4/0/24/48/168 | 1/0/3 | Illumina HiSeq 1500 |
GSE96764 | 29748257 | 6 | 0/2/4 | 0/1/2 | Illumina HiSeq 2000 |
curatedAdipoRNA
All the samples in this dataset come from the 3T3-L1 cell line. The MDI
induction media, were used to induce adipocyte differentiation. The two
important variables in the dataset are time
and
stage
, which correspond to the time point and stage of
differentiation when the sample were captured. Ideally, this dataset
should be treated as a time course. However, for the purposes of this
example, we only used samples from two time points 0 and 24 hours and
treated them as independent groups. The goal of this example is to show
how a typical differential expression analysis can be applied in the
dataset. The main focus is to explain how the the data and metadata in
adipo_counts
fit in each main piece of the analysis. We
started by filtering the low quality samples and low count genes. Then
we applied the DESeq2
method with the default values.
First, we subset the adipo_counts
object to all samples
that has time points 0 or 24. The total number of samples is 30; 22 at 0
hour and 8 samples at 24 hours. The total number of features/genes in
the set is 23916.
# subsetting counts to 0 and 24 hours
se <- adipo_counts[, adipo_counts$time %in% c(0, 24)]
# showing the numbers of features, samples and time groups
dim(se)
#> [1] 23916 30
table(se$time)
#>
#> 0 24
#> 22 8
Since the quality metrics are reported per run file, we need to get
the SSR* id for each of the samples. Notice that, some samples would
have more than one file. In this case because some of the samples are
paired-end, so each of them would have two files SRR\*_1
and SRR\*_2
.
# filtering low quality samples
# chek the library layout
table(se$library_layout)
#>
#> PAIRED SINGLE
#> 12 18
# check the number of files in qc
qc <- se$qc
table(lengths(qc))
#>
#> 1 2
#> 18 12
# flattening qc list
qc <- unlist(qc, recursive = FALSE)
length(qc)
#> [1] 42
The qc
object of the colData
contains the
output of fastqc
in a qc_read
class. More information on this object can be
accessed by calling ?fastqcr::qc_read
. Here, we only use
the per_base_sequence_quality
to filter out low quality
samples. This is by no means enough quality control but it should drive
the point home.
# extracting per_base_sequence_quality
per_base <- lapply(qc, function(x) {
df <- x[['per_base_sequence_quality']]
df %>%
select(Base, Mean) %>%
transform(Base = strsplit(as.character(Base), '-')) %>%
unnest(Base) %>%
mutate(Base = as.numeric(Base))
}) %>%
bind_rows(.id = 'run')
After tidying the data, we get a data.frame
with three
columns; run
, Mean
and Base
for
the run ID, the mean quality score and the base number in each read. fastqc
provide thorough documentation of this quality control module and
others. Notice that read length varies significantly between the runs
and that the average of the mean score is suitable.
# a quick look at quality scores
summary(per_base)
#> run Base Mean
#> Length:3408 Min. : 1.00 Min. :10.74
#> Class :character 1st Qu.: 21.00 1st Qu.:34.45
#> Mode :character Median : 42.00 Median :36.44
#> Mean : 50.24 Mean :35.28
#> 3rd Qu.: 70.00 3rd Qu.:37.90
#> Max. :368.00 Max. :40.17
To identify the low quality samples, we categorize the runs by
length
and run_average
which are the read
length and the average of the per base mean scores. The following figure
should make it easier to see why these cutoff were used in this
case.
# find low quality runs
per_base <- per_base %>%
group_by(run) %>%
mutate(length = max(Base) > 150,
run_average = mean(Mean) > 34)
# plot average per base quality
per_base %>%
ggplot(aes(x = Base, y = Mean, group = run, color = run_average)) +
geom_line() +
facet_wrap(~length, scales = 'free_x')
The run IDs of the “bad” samples is then used to remove them from the dataset.
# get run ids of low quality samples
bad_samples <- data.frame(samples = unique(per_base$run[per_base$run_average == FALSE]))
bad_samples <- separate(bad_samples, col = samples, into = c('id', 'run'), sep = '\\.')
# subset the counts object
se2 <- se[, !se$id %in% bad_samples$id]
table(se2$time)
#>
#> 0 24
#> 19 6
To identify the low count feature/genes (possibly not expressed), we keep only the features with at least 10 reads in 2 or more samples. Then we subset the object to exclude these genes.
DESeq2
DESeq2
is a well documented and widely used R package for the differential
expression analysis. Here we use the default values of
DESeq
to find the genes which are deferentially expressed
between the samples at 24 hours and 0 hours.
# differential expression analysis
se3$time <- factor(se3$time)
dds <- DESeqDataSet(se3, ~time)
#> renaming the first element in assays to 'counts'
#> converting counts to integer mode
dds <- DESeq(dds)
#> estimating size factors
#> estimating dispersions
#> gene-wise dispersion estimates
#> mean-dispersion relationship
#> final dispersion estimates
#> fitting model and testing
#> -- replacing outliers and refitting for 53 genes
#> -- DESeq argument 'minReplicatesForReplace' = 7
#> -- original counts are preserved in counts(dds)
#> estimating dispersions
#> fitting model and testing
res <- results(dds)
table(res$padj < .1)
#>
#> FALSE TRUE
#> 6194 7462
In this example, we didn’t attempt to correct for the between study
factors that might confound the results. To show how is this possible,
we use the PCA
plots with a few of these factors in the following graphs. The first
uses the time
factor which is the factor of interest in
this case. We see that the DESeq
transformation did a good
job separating the samples to their expected groups. However, it also
seems that the time
is not the only factor in play. For
example, we show in the second and the third graphs two other factors
library_layout
and instrument_model
which
might explain some of the variance between the samples. This is expected
because the data were collected from different studies using slightly
different protocols and different sequencing machines. Therefore, it is
necessary to account for these differences to obtain reliable results.
There are multiple methods to do that such as Removing Unwanted
Variation (RUV) and Surrogate
Variable Analysis (SVA).
Speaking of studies, as mentioned earlier the studies
object contains full information of the references of the original
studies in which the data were published. Please cite them when using
this dataset.
# keys of the studies in this subset of the data
unique(se3$bibtexkey)
#> [1] "Duteil2014" "zhao_fto-dependent_2014"
#> [3] "siersbaek_molecular_2014" "Lim2015"
#> [5] "brunmeir_comparative_2016" "Brier2017"
#> [7] "park_distinct_2017" "chen_diabetes_2018"
#> [9] "siersbaek_dynamic_2017" "ryu_metabolic_2018"
curatedAdipoRNA
For citing the package use:
# citing the package
citation("curatedAdipoRNA")
#> To cite package 'curatedAdipoRNA' in publications use:
#>
#> Ahmed M (2024). _curatedAdipoRNA: A Curated RNA-Seq Dataset of
#> MDI-induced Differentiated Adipocytes (3T3-L1)_.
#> doi:10.18129/B9.bioc.curatedAdipoRNA
#> <https://doi.org/10.18129/B9.bioc.curatedAdipoRNA>, R package version
#> 1.23.0, <https://bioconductor.org/packages/curatedAdipoRNA>.
#>
#> A BibTeX entry for LaTeX users is
#>
#> @Manual{,
#> title = {curatedAdipoRNA: A Curated RNA-Seq Dataset of MDI-induced Differentiated Adipocytes
#> (3T3-L1)},
#> author = {Mahmoud Ahmed},
#> year = {2024},
#> note = {R package version 1.23.0},
#> url = {https://bioconductor.org/packages/curatedAdipoRNA},
#> doi = {10.18129/B9.bioc.curatedAdipoRNA},
#> }
devtools::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────
#> setting value
#> version R Under development (unstable) (2024-10-21 r87258)
#> os Ubuntu 24.04.1 LTS
#> system x86_64, linux-gnu
#> ui X11
#> language (EN)
#> collate C
#> ctype en_US.UTF-8
#> tz America/New_York
#> date 2024-10-31
#> pandoc 3.1.3 @ /usr/bin/ (via rmarkdown)
#>
#> ─ Packages ───────────────────────────────────────────────────────────────────
#> ! package * version date (UTC) lib source
#> abind 1.4-8 2024-09-12 [2] CRAN (R 4.5.0)
#> Biobase * 2.67.0 2024-10-31 [2] Bioconductor 3.21 (R 4.5.0)
#> BiocGenerics * 0.53.1 2024-10-31 [2] Bioconductor 3.21 (R 4.5.0)
#> BiocParallel 1.41.0 2024-10-31 [2] Bioconductor 3.21 (R 4.5.0)
#> bslib 0.8.0 2024-07-29 [2] CRAN (R 4.5.0)
#> cachem 1.1.0 2024-05-16 [2] CRAN (R 4.5.0)
#> cli 3.6.3 2024-06-21 [2] CRAN (R 4.5.0)
#> codetools 0.2-20 2024-03-31 [3] CRAN (R 4.5.0)
#> colorspace 2.1-1 2024-07-26 [2] CRAN (R 4.5.0)
#> crayon 1.5.3 2024-06-20 [2] CRAN (R 4.5.0)
#> curatedAdipoRNA * 1.23.0 2024-10-31 [1] Bioconductor 3.21 (R 4.5.0)
#> DelayedArray 0.33.1 2024-10-31 [2] Bioconductor 3.21 (R 4.5.0)
#> R DESeq2 * 1.47.0 <NA> [2] <NA>
#> devtools 2.4.5 2022-10-11 [2] CRAN (R 4.5.0)
#> digest 0.6.37 2024-08-19 [2] CRAN (R 4.5.0)
#> dplyr * 1.1.4 2023-11-17 [2] CRAN (R 4.5.0)
#> ellipsis 0.3.2 2021-04-29 [2] CRAN (R 4.5.0)
#> evaluate 1.0.1 2024-10-10 [2] CRAN (R 4.5.0)
#> fansi 1.0.6 2023-12-08 [2] CRAN (R 4.5.0)
#> farver 2.1.2 2024-05-13 [2] CRAN (R 4.5.0)
#> fastmap 1.2.0 2024-05-15 [2] CRAN (R 4.5.0)
#> fastqcr * 0.1.3 2023-02-18 [2] CRAN (R 4.5.0)
#> fs 1.6.5 2024-10-30 [2] CRAN (R 4.5.0)
#> generics * 0.1.3 2022-07-05 [2] CRAN (R 4.5.0)
#> GenomeInfoDb * 1.43.0 2024-10-31 [2] Bioconductor 3.21 (R 4.5.0)
#> GenomeInfoDbData 1.2.13 2024-10-23 [2] Bioconductor
#> GenomicRanges * 1.59.0 2024-10-31 [2] Bioconductor 3.21 (R 4.5.0)
#> ggplot2 * 3.5.1 2024-04-23 [2] CRAN (R 4.5.0)
#> glue 1.8.0 2024-09-30 [2] CRAN (R 4.5.0)
#> gtable 0.3.6 2024-10-25 [2] CRAN (R 4.5.0)
#> highr 0.11 2024-05-26 [2] CRAN (R 4.5.0)
#> htmltools 0.5.8.1 2024-04-04 [2] CRAN (R 4.5.0)
#> htmlwidgets 1.6.4 2023-12-06 [2] CRAN (R 4.5.0)
#> httpuv 1.6.15 2024-03-26 [2] CRAN (R 4.5.0)
#> httr 1.4.7 2023-08-15 [2] CRAN (R 4.5.0)
#> IRanges * 2.41.0 2024-10-31 [2] Bioconductor 3.21 (R 4.5.0)
#> jquerylib 0.1.4 2021-04-26 [2] CRAN (R 4.5.0)
#> jsonlite 1.8.9 2024-09-20 [2] CRAN (R 4.5.0)
#> knitr 1.48 2024-07-07 [2] CRAN (R 4.5.0)
#> labeling 0.4.3 2023-08-29 [2] CRAN (R 4.5.0)
#> later 1.3.2 2023-12-06 [2] CRAN (R 4.5.0)
#> lattice 0.22-6 2024-03-20 [3] CRAN (R 4.5.0)
#> lifecycle 1.0.4 2023-11-07 [2] CRAN (R 4.5.0)
#> locfit 1.5-9.10 2024-06-24 [2] CRAN (R 4.5.0)
#> magrittr 2.0.3 2022-03-30 [2] CRAN (R 4.5.0)
#> Matrix 1.7-1 2024-10-18 [3] CRAN (R 4.5.0)
#> MatrixGenerics * 1.19.0 2024-10-31 [2] Bioconductor 3.21 (R 4.5.0)
#> matrixStats * 1.4.1 2024-09-08 [2] CRAN (R 4.5.0)
#> memoise 2.0.1 2021-11-26 [2] CRAN (R 4.5.0)
#> mime 0.12 2021-09-28 [2] CRAN (R 4.5.0)
#> miniUI 0.1.1.1 2018-05-18 [2] CRAN (R 4.5.0)
#> munsell 0.5.1 2024-04-01 [2] CRAN (R 4.5.0)
#> pillar 1.9.0 2023-03-22 [2] CRAN (R 4.5.0)
#> pkgbuild 1.4.5 2024-10-28 [2] CRAN (R 4.5.0)
#> pkgconfig 2.0.3 2019-09-22 [2] CRAN (R 4.5.0)
#> pkgload 1.4.0 2024-06-28 [2] CRAN (R 4.5.0)
#> profvis 0.4.0 2024-09-20 [2] CRAN (R 4.5.0)
#> promises 1.3.0 2024-04-05 [2] CRAN (R 4.5.0)
#> purrr 1.0.2 2023-08-10 [2] CRAN (R 4.5.0)
#> R6 2.5.1 2021-08-19 [2] CRAN (R 4.5.0)
#> Rcpp 1.0.13 2024-07-17 [2] CRAN (R 4.5.0)
#> remotes 2.5.0 2024-03-17 [2] CRAN (R 4.5.0)
#> rlang 1.1.4 2024-06-04 [2] CRAN (R 4.5.0)
#> rmarkdown 2.28 2024-08-17 [2] CRAN (R 4.5.0)
#> S4Arrays 1.7.0 2024-10-29 [2] Bioconductor 3.21 (R 4.5.0)
#> S4Vectors * 0.45.0 2024-10-31 [2] Bioconductor 3.21 (R 4.5.0)
#> sass 0.4.9 2024-03-15 [2] CRAN (R 4.5.0)
#> scales 1.3.0 2023-11-28 [2] CRAN (R 4.5.0)
#> sessioninfo 1.2.2 2021-12-06 [2] CRAN (R 4.5.0)
#> shiny 1.9.1 2024-08-01 [2] CRAN (R 4.5.0)
#> SparseArray 1.7.0 2024-10-31 [2] Bioconductor 3.21 (R 4.5.0)
#> SummarizedExperiment * 1.37.0 2024-10-31 [2] Bioconductor 3.21 (R 4.5.0)
#> tibble 3.2.1 2023-03-20 [2] CRAN (R 4.5.0)
#> tidyr * 1.3.1 2024-01-24 [2] CRAN (R 4.5.0)
#> tidyselect 1.2.1 2024-03-11 [2] CRAN (R 4.5.0)
#> UCSC.utils 1.3.0 2024-10-31 [2] Bioconductor 3.21 (R 4.5.0)
#> urlchecker 1.0.1 2021-11-30 [2] CRAN (R 4.5.0)
#> usethis 3.0.0 2024-07-29 [2] CRAN (R 4.5.0)
#> utf8 1.2.4 2023-10-22 [2] CRAN (R 4.5.0)
#> vctrs 0.6.5 2023-12-01 [2] CRAN (R 4.5.0)
#> withr 3.0.2 2024-10-28 [2] CRAN (R 4.5.0)
#> xfun 0.48 2024-10-03 [2] CRAN (R 4.5.0)
#> xtable 1.8-4 2019-04-21 [2] CRAN (R 4.5.0)
#> XVector 0.47.0 2024-10-29 [2] Bioconductor 3.21 (R 4.5.0)
#> yaml 2.3.10 2024-07-26 [2] CRAN (R 4.5.0)
#> zlibbioc 1.53.0 2024-10-31 [2] Bioconductor 3.21 (R 4.5.0)
#>
#> [1] /tmp/RtmpppT4dh/Rinst211d8547b7306
#> [2] /home/biocbuild/bbs-3.21-bioc/R/site-library
#> [3] /home/biocbuild/bbs-3.21-bioc/R/library
#>
#> R ── Package was removed from disk.
#>
#> ──────────────────────────────────────────────────────────────────────────────