Using VisiumExperiment at spatialLIBD package
By Brenda Pardo
A month ago, I started an enriching adventure by joining Leonardo Collado-Torres’ team at Lieber Institute for Brain Development. Since then, I have been working on modifying spatialLIBD, a package to interactively visualize the LIBD human dorsolateral pre-frontal cortex (DLPFC) spatial transcriptomics data (Maynard, Collado-Torres, Weber, Uytingco, et al., 2020). The performed modifications allow spatialLIBD to use objects of the VisiumExperiment
class, which is designed to specifically store spatial transcriptomics data (Righelli and Risso, 2020). In this blog post, I describe the changes we carried out to the package and happily share a piece of my journey through my research internship at LIBD.
Starting internship at Lieber Institute
As part of the Genomic Sciences undergraduate program at Universidad Nacional Autónoma de México (UNAM), I attended a single cell data analysis course imparted by Leo Collado. During the sessions, I found quite fun and useful programming in R and decided I wanted to go deeper into the use of this programming language. My interest was enhanced when Leo highlighted in the CDSB Workshop 2020, we could not just be R users but developers, and generate helpful tools for biological data analysis. With this motivation, I reached out to Leo, and that’s how the adventure started: I joined Leonardo Collado’s team at LIBD, and my research internship was inaugurated with this tweet.
I'm super happy that I'm starting a research internship mentored by @fellgernon at @LieberInstitute and @jhubiostat 😆.#CDSB2020 and the course at LIIGH definitely impacted me by increasing my interest in R. Attending was such an encouraging and enriching experience. https://t.co/1iwqKwolTb
— Brenda Pardo (@PardoBree) September 5, 2020
Since then, I have been working with Leo on adapting the package spatialLIBD to use R objects structured specifically to store spatial transcriptomics data. This is work that I’ve been doing part-time while also attending the third 1 year classes at LCG-UNAM-EJ.
What is spatialLIBD?
Spatial transcriptomics allows to know the transcriptome of a small group of cells in a tissue sample, and to map the exact location of the cells with that expression profile. This technology has generated the need for tools to visualize the data produced by it. spatialLIBD is a Bioconductor package to interactively inspect the DLPFC spatial transcriptomics 10x Genomics Visium data from Maynard, Collado-Torres et al, 2020 analyzed by LIBD researchers and collaborators.
It contains functions for:
- accessing the spatial transcriptomics data,
- visualizing the spot-level spatial gene expression data and clusters, and
- inspecting the data interactively either on the user’s computer or through a web application.
The spatialLIBD package used to employ R objects from the SingleCellExperiment
class to store the data, nevertheless Righelli et al created a more accurate class, VisiumExperiment
, for this data. This class is in the package SpatialExperiment.
The VisiumExperiment class
The VisiumExperiment
class inherits from the SingleCellExperiment
class, however, it includes new attributes and methods that allow optimal accommodation of the spatial transcriptomics data. It contains specific slots to store:
- The spatial coordinates for each small group of cells (contained in a spot).
- The paths to the tissue images.
- Information about which spots are covered by tissue.
- The scale factors to know the location of the spots in pixels.
and methods to set and retrieve the information contained in these slots.
Now that I have introduced the context, I can start relating my task: to adapt the set of functions that make up spatialLIBD so that they could work with VisiumExperiment
objects. And now, I’ll drive you through the updates.
Before starting, remember to install spatialLIBD by using the following commands in your R session.
if (!requireNamespace("BiocManager", quietly = TRUE)) {
install.packages("BiocManager")
}
BiocManager::install("spatialLIBD")
Now, please load the package.
library("spatialLIBD")
Downloading DLPFC data contained in a VisiumExperiment object
Let’s start with the function fetch_data()
, which was previously designed to retrieve a SingleCellExperiment
object called sce
, containing DLPFC spatial transcriptomics data. With our updates, the function is able to return ve
, an object belonging to the VisiumExperiment
class, by calling a new function sce_to_ve()
, that takes data from sce
and rearranges it to the structure of the VisiumExperiment
class (defined by Righelli et al).
Below, we obtain ve
.
## Download ve object
ve <- fetch_data(type = "ve")
## snapshotDate(): 2020-10-02
## 2020-11-09 14:59:36 loading file /Users/lcollado/Library/Caches/BiocFileCache/c4f432e69d6_Human_DLPFC_Visium_processedData_sce_scran_spatialLIBD.Rdata%3Fdl%3D1
And once we downloaded the object, we can explore it
ve
## class: VisiumExperiment
## dim: 33538 47681
## metadata(0):
## assays(2): counts logcounts
## rownames(33538): ENSG00000243485 ENSG00000237613 ... ENSG00000277475
## ENSG00000268674
## rowData names(9): source type ... gene_search is_top_hvg
## colnames(47681): AAACAACGAATAGTTC-1 AAACAAGTATCTCCCA-1 ...
## TTGTTTCCATACAACT-1 TTGTTTGTGTAAATTC-1
## colData names(66): Cluster height ... pseudobulk_UMAP_spatial
## markers_UMAP_spatial
## reducedDimNames(6): PCA TSNE_perplexity50 ... TSNE_perplexity80
## UMAP_neighbors15
## altExpNames(0):
## spatialCoordinates(7): Cell_ID sample_name ... pxl_row_in_fullres
## pxl_col_in_fullres
## inTissue(1): 47681
## imagePaths(12):
## /Users/lcollado/Library/Caches/BiocFileCache/c4f3c2dc99_151507_tissue_lowres_image.png
## /Users/lcollado/Library/Caches/BiocFileCache/c4f6e20c2bc_151508_tissue_lowres_image.png
## ...
## /Users/lcollado/Library/Caches/BiocFileCache/c4f2196b8e6_151675_tissue_lowres_image.png
## /Users/lcollado/Library/Caches/BiocFileCache/c4f2e451544_151676_tissue_lowres_image.png
Observe that our ve
object is a bit more complex than a regular VisiumExperiment
one because it contains multiple samples, and as a consequence, multiple images. This has an impact on the arrangement we made for part of the data.
Storing and retrieving scale factors from a VisiumExperiment object
As previously mentioned, there is a new slot in VisiumExperiment
class created to store the values to convert spots coordinates into pixels named scaleFactors
. This slot has a storage limitation: it has to contain a list with the exact names for the four scale factors for a given sample (tissue_lowres_scalef
, fiducial_diameter_fullres
, tissue_hires_scalef
, spot_diameter_fullres
). Given that in DLFPC data we do not have just one, but multiple samples, we decided to create a list with the required four scale factors names, but also a fifth slot with the full list of scale factors for all our samples, and it looks like this:
## Get scale factors
facs <- SpatialExperiment::scaleFactors(ve)
## "current" scale factors
facs[1:4]
## $spot_diameter_fullres
## [1] 96.37511
##
## $tissue_hires_scalef
## [1] 0.150015
##
## $fiducial_diameter_fullres
## [1] 144.5627
##
## $tissue_lowres_scalef
## [1] 0.0450045
## Data for the rest of the 12 images
class(facs[5])
## [1] "list"
length(facs[[5]])
## [1] 12
In addition, we created a function called update_scaleFactors()
that generates a VisiumExperiment
object with updated scale factors for a given input sample ID in case the user wants uniquely a set of scale factors.
Visualizing the histology image from a VisiumExperiment object
Now let’s talk about the new location of the histology images in ve
and how to display them. The object sce
has a tibble in its metadata slot that contains a grob for each sample image. In contrast, ve
has a list of image paths contained in the imagePath
slot.
Downloading the histology images
VisiumExperiment
class validity code checks that the image files, whose paths are in imagePaths
, exist locally instead of being available remotely through a URL. Thus, we decided to download the images at the moment the ve
object is created; this process happens in our function sce_to_ve
.
The geom_spatial() function
For visualizing the histology image from visium, the function geom_spatial()
was previously created. To do this, it defines a [ggplot2::layer()] , taking the information from the metadata tibble of the sce
object. In order to make geom_spatial()
available to use ve
as an input, we created a novel function read_image()
that takes the image path of the desired samples, creates the grobs and puts them on a tibble.
Here you can observe an example of the usage of these functions.
## Extract data from a sample (with ID 151507)
sample_id <- "151507"
ve_sub <- ve[, SpatialExperiment::spatialCoords(ve)$sample_name == sample_id]
sample_df <- as.data.frame(SpatialExperiment::spatialCoords(ve_sub))
## Plot with geom_spatial
ggplot2::ggplot(
sample_df,
ggplot2::aes(
x = imagecol,
y = imagerow,
)
) +
geom_spatial(
data = read_image(ve_sub, sample_id),
ggplot2::aes(grob = grob),
x = 0.5,
y = 0.5
)
Making other functions compatible with VisiumExperiment class
Other functions just like sce_image_gene()
, sce_image_clus()
, sce_imge_grid()
and sce_image_grid_gene()
access the column containing the sample IDs, which is located in different slots depending on the object class. For sce
, sample_name
is in colData
slot, and for ve
it is in the spatialCoords
slot. Hence, conditionals evaluating the object class were added in order to access the information correctly.
Finally, the sce_image_clus_p()
and sce_image_gene_p()
functions also had important modifications. They visualize the gene expression (or any continuous variable) and clusters for one given sample at the spot-level using the histology information on the background; both functions receive a data frame with information residing in colData
of the object sce
, including the spatial coordinates. Given the VisiumExperiment
object ve
contains spatial coordinates in spatialCoords
slot, a function called ve_image_colData()
was created in order to generate the data frame by joining the required columns for the input for the functions sce_image_clus_p()
and sce_image_gene_p()
.
An example of how these functions can accept the VisiumExperiment
object is shown here:
## Use the data previously extracted for a sample
## Prepare the data for the plotting function
df <- colData(ve_sub)
df$COUNT <- df$expr_chrM_ratio
sce_image_gene_p(
sce = ve_sub,
d = df,
sampleid = sample_id,
title = "151507 chrM expr ratio",
spatial = FALSE
)
Although the goal is that the end user won’t need to use these lower-level functions and can just run code like this with our original SingleCellExperiment
objects as well as the new VisiumExperiment
objects:
sce_image_gene(
sce = ve_sub,
sampleid = sample_id,
spatial = TRUE
)
Wrapping up
And that’s it, those are the main modifications the package went through to accept our VisiumExperiment object
. These changes are part of Bioconductor 3.12 that was just recently released, so you can try them out!
I could make a long list of things that I have learned and gained during the process, but I will briefly summarize it. Firstly, I had so much fun coding in R, I got very familiar with the programming language and started feeling like a fish in the water. Secondly, I learned how to write R packages and found it quite useful to order code and document it. And lastly, I acquired a set of skills and good habits to organize my code and projects in R. I want to emphasize that, an element of great importance to this learning and growth process is having a mentor who is enthusiastic about sharing knowledge, always attentive and patient with the student. All his teaching has driven and inspired me to program and enjoy while doing it. Undoubtedly, the road continues and there is much to continue learning!
Future Plans?
I’m looking forward to learning more about data analysis while working with 10x Genomics Visium data with Leo and colleagues at LIBD. All while potentially working on more R packages as I keep learning new skills that will help me join grad school programs. In the meantime, I’m going to apply to present these updates at EuroBioC2020 and would love to meet you there!
Thanks for reading this post and you are welcome to keep exploring spatialLIBD and the DLPFC data.
Acknowledgements
This blog post was made possible thanks to:
References
[1] C. Boettiger. knitcitations: Citations for ‘Knitr’ Markdown Files. R package version 1.0.10. 2020. URL: https://github.com/cboettig/knitcitations.
[2] G. Csárdi, R. core, H. Wickham, W. Chang, et al. sessioninfo: R Session Information. R package version 1.1.1. 2018. URL: https://CRAN.R-project.org/package=sessioninfo.
[3] K. R. Maynard, L. Collado-Torres, L. M. Weber, C. Uytingco, et al. “Transcriptome-scale spatial gene expression in the human dorsolateral prefrontal cortex”. In: bioRxiv (2020). DOI: 10.1101/2020.02.28.969931. URL: https://www.biorxiv.org/content/10.1101/2020.02.28.969931v1.
[4] A. Oleś, M. Morgan, and W. Huber. BiocStyle: Standard styles for vignettes and other Bioconductor documents. R package version 2.18.0. 2020. URL: https://github.com/Bioconductor/BiocStyle.
[5] D. Righelli and D. Risso. SpatialExperiment: S4 Class for Spatial Experiments handling. R package version 1.0.0. 2020.
[6] Y. Xie, A. P. Hill, and A. Thomas. blogdown: Creating Websites with R Markdown. ISBN 978-0815363729. Boca Raton, Florida: Chapman and Hall/CRC, 2017. URL: https://github.com/rstudio/blogdown.
Reproducibility
## ─ Session info ───────────────────────────────────────────────────────────────────────────────────────────────────────
## setting value
## version R version 4.0.3 (2020-10-10)
## os macOS Catalina 10.15.7
## system x86_64, darwin17.0
## ui X11
## language (EN)
## collate en_US.UTF-8
## ctype en_US.UTF-8
## tz America/New_York
## date 2020-11-09
##
## ─ Packages ───────────────────────────────────────────────────────────────────────────────────────────────────────────
## package * version date lib source
## AnnotationDbi 1.52.0 2020-10-27 [1] Bioconductor
## AnnotationHub 2.22.0 2020-10-27 [1] Bioconductor
## assertthat 0.2.1 2019-03-21 [1] CRAN (R 4.0.2)
## attempt 0.3.1 2020-05-03 [1] CRAN (R 4.0.2)
## backports 1.2.0 2020-11-02 [1] CRAN (R 4.0.3)
## beachmat 2.6.0 2020-10-27 [1] Bioconductor
## beeswarm 0.2.3 2016-04-25 [1] CRAN (R 4.0.2)
## benchmarkme 1.0.4 2020-05-09 [1] CRAN (R 4.0.2)
## benchmarkmeData 1.0.4 2020-04-23 [1] CRAN (R 4.0.2)
## Biobase * 2.50.0 2020-10-27 [1] Bioconductor
## BiocFileCache 1.14.0 2020-10-27 [1] Bioconductor
## BiocGenerics * 0.36.0 2020-10-27 [1] Bioconductor
## BiocManager 1.30.10 2019-11-16 [1] CRAN (R 4.0.2)
## BiocNeighbors 1.8.0 2020-10-27 [1] Bioconductor
## BiocParallel 1.24.0 2020-10-27 [1] Bioconductor
## BiocSingular 1.6.0 2020-10-27 [1] Bioconductor
## BiocStyle * 2.18.0 2020-10-27 [1] Bioconductor
## BiocVersion 3.12.0 2020-05-14 [1] Bioconductor
## bit 4.0.4 2020-08-04 [1] CRAN (R 4.0.2)
## bit64 4.0.5 2020-08-30 [1] CRAN (R 4.0.2)
## bitops 1.0-6 2013-08-17 [1] CRAN (R 4.0.2)
## blob 1.2.1 2020-01-20 [1] CRAN (R 4.0.2)
## blogdown * 0.21 2020-10-11 [1] CRAN (R 4.0.3)
## bmp 0.3 2017-09-11 [1] CRAN (R 4.0.2)
## bookdown 0.21 2020-10-13 [1] CRAN (R 4.0.3)
## cli 2.1.0 2020-10-12 [1] CRAN (R 4.0.2)
## codetools 0.2-16 2018-12-24 [1] CRAN (R 4.0.3)
## colorout 1.2-2 2020-11-03 [1] Github (jalvesaq/colorout@726d681)
## colorspace 1.4-1 2019-03-18 [1] CRAN (R 4.0.2)
## config 0.3 2018-03-27 [1] CRAN (R 4.0.2)
## cowplot 1.1.0 2020-09-08 [1] CRAN (R 4.0.2)
## crayon 1.3.4 2017-09-16 [1] CRAN (R 4.0.2)
## curl 4.3 2019-12-02 [1] CRAN (R 4.0.1)
## data.table 1.13.2 2020-10-19 [1] CRAN (R 4.0.2)
## DBI 1.1.0 2019-12-15 [1] CRAN (R 4.0.2)
## dbplyr 2.0.0 2020-11-03 [1] CRAN (R 4.0.3)
## DelayedArray 0.16.0 2020-10-27 [1] Bioconductor
## DelayedMatrixStats 1.12.0 2020-10-27 [1] Bioconductor
## desc 1.2.0 2018-05-01 [1] CRAN (R 4.0.2)
## digest 0.6.27 2020-10-24 [1] CRAN (R 4.0.2)
## dockerfiler 0.1.3 2019-03-19 [1] CRAN (R 4.0.2)
## doParallel 1.0.16 2020-10-16 [1] CRAN (R 4.0.2)
## dotCall64 1.0-0 2018-07-30 [1] CRAN (R 4.0.2)
## dplyr 1.0.2 2020-08-18 [1] CRAN (R 4.0.2)
## DT 0.16 2020-10-13 [1] CRAN (R 4.0.2)
## ellipsis 0.3.1 2020-05-15 [1] CRAN (R 4.0.2)
## evaluate 0.14 2019-05-28 [1] CRAN (R 4.0.1)
## ExperimentHub 1.16.0 2020-10-27 [1] Bioconductor
## fansi 0.4.1 2020-01-08 [1] CRAN (R 4.0.2)
## farver 2.0.3 2020-01-16 [1] CRAN (R 4.0.2)
## fastmap 1.0.1 2019-10-08 [1] CRAN (R 4.0.2)
## fields 11.6 2020-10-09 [1] CRAN (R 4.0.2)
## foreach 1.5.1 2020-10-15 [1] CRAN (R 4.0.2)
## fs 1.5.0 2020-07-31 [1] CRAN (R 4.0.2)
## generics 0.1.0 2020-10-31 [1] CRAN (R 4.0.2)
## GenomeInfoDb * 1.26.0 2020-10-27 [1] Bioconductor
## GenomeInfoDbData 1.2.4 2020-11-03 [1] Bioconductor
## GenomicRanges * 1.42.0 2020-10-27 [1] Bioconductor
## ggbeeswarm 0.6.0 2017-08-07 [1] CRAN (R 4.0.2)
## ggplot2 3.3.2 2020-06-19 [1] CRAN (R 4.0.2)
## glue 1.4.2 2020-08-27 [1] CRAN (R 4.0.2)
## golem 0.2.1 2020-03-05 [1] CRAN (R 4.0.2)
## gridExtra 2.3 2017-09-09 [1] CRAN (R 4.0.2)
## gtable 0.3.0 2019-03-25 [1] CRAN (R 4.0.2)
## htmltools 0.5.0 2020-06-16 [1] CRAN (R 4.0.2)
## htmlwidgets 1.5.2 2020-10-03 [1] CRAN (R 4.0.2)
## httpuv 1.5.4 2020-06-06 [1] CRAN (R 4.0.2)
## httr 1.4.2 2020-07-20 [1] CRAN (R 4.0.2)
## interactiveDisplayBase 1.28.0 2020-10-27 [1] Bioconductor
## IRanges * 2.24.0 2020-10-27 [1] Bioconductor
## irlba 2.3.3 2019-02-05 [1] CRAN (R 4.0.2)
## iterators 1.0.13 2020-10-15 [1] CRAN (R 4.0.2)
## jpeg 0.1-8.1 2019-10-24 [1] CRAN (R 4.0.2)
## jsonlite 1.7.1 2020-09-07 [1] CRAN (R 4.0.2)
## knitcitations * 1.0.10 2020-11-03 [1] Github (cboettig/knitcitations@ea5d202)
## knitr 1.30 2020-09-22 [1] CRAN (R 4.0.2)
## labeling 0.4.2 2020-10-20 [1] CRAN (R 4.0.2)
## later 1.1.0.1 2020-06-05 [1] CRAN (R 4.0.2)
## lattice 0.20-41 2020-04-02 [1] CRAN (R 4.0.3)
## lazyeval 0.2.2 2019-03-15 [1] CRAN (R 4.0.2)
## lifecycle 0.2.0 2020-03-06 [1] CRAN (R 4.0.2)
## lubridate 1.7.9 2020-06-08 [1] CRAN (R 4.0.2)
## magrittr 1.5 2014-11-22 [1] CRAN (R 4.0.2)
## maps 3.3.0 2018-04-03 [1] CRAN (R 4.0.2)
## Matrix 1.2-18 2019-11-27 [1] CRAN (R 4.0.3)
## MatrixGenerics * 1.2.0 2020-10-27 [1] Bioconductor
## matrixStats * 0.57.0 2020-09-25 [1] CRAN (R 4.0.2)
## memoise 1.1.0 2017-04-21 [1] CRAN (R 4.0.2)
## mime 0.9 2020-02-04 [1] CRAN (R 4.0.2)
## munsell 0.5.0 2018-06-12 [1] CRAN (R 4.0.2)
## pillar 1.4.6 2020-07-10 [1] CRAN (R 4.0.2)
## pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.0.2)
## pkgload 1.1.0 2020-05-29 [1] CRAN (R 4.0.2)
## plotly 4.9.2.1 2020-04-04 [1] CRAN (R 4.0.2)
## plyr 1.8.6 2020-03-03 [1] CRAN (R 4.0.2)
## png 0.1-7 2013-12-03 [1] CRAN (R 4.0.2)
## Polychrome 1.2.5 2020-03-29 [1] CRAN (R 4.0.2)
## promises 1.1.1 2020-06-09 [1] CRAN (R 4.0.2)
## purrr 0.3.4 2020-04-17 [1] CRAN (R 4.0.2)
## R6 2.5.0 2020-10-28 [1] CRAN (R 4.0.2)
## rappdirs 0.3.1 2016-03-28 [1] CRAN (R 4.0.2)
## RColorBrewer 1.1-2 2014-12-07 [1] CRAN (R 4.0.2)
## Rcpp 1.0.5 2020-07-06 [1] CRAN (R 4.0.2)
## RCurl 1.98-1.2 2020-04-18 [1] CRAN (R 4.0.2)
## readbitmap 0.1.5 2018-06-27 [1] CRAN (R 4.0.2)
## RefManageR 1.3.0 2020-11-03 [1] Github (ropensci/RefManageR@ab8fe60)
## remotes 2.2.0 2020-07-21 [1] CRAN (R 4.0.2)
## rlang 0.4.8 2020-10-08 [1] CRAN (R 4.0.2)
## rmarkdown 2.5 2020-10-21 [1] CRAN (R 4.0.3)
## roxygen2 7.1.1 2020-06-27 [1] CRAN (R 4.0.2)
## rprojroot 1.3-2 2018-01-03 [1] CRAN (R 4.0.2)
## RSQLite 2.2.1 2020-09-30 [1] CRAN (R 4.0.2)
## rstudioapi 0.11 2020-02-07 [1] CRAN (R 4.0.2)
## rsvd 1.0.3 2020-02-17 [1] CRAN (R 4.0.2)
## S4Vectors * 0.28.0 2020-10-27 [1] Bioconductor
## scales 1.1.1 2020-05-11 [1] CRAN (R 4.0.2)
## scater 1.18.0 2020-10-27 [1] Bioconductor
## scatterplot3d 0.3-41 2018-03-14 [1] CRAN (R 4.0.2)
## scuttle 1.0.0 2020-10-27 [1] Bioconductor
## sessioninfo * 1.1.1 2018-11-05 [1] CRAN (R 4.0.2)
## shiny 1.5.0 2020-06-23 [1] CRAN (R 4.0.2)
## shinyWidgets 0.5.4 2020-10-06 [1] CRAN (R 4.0.2)
## SingleCellExperiment * 1.12.0 2020-10-27 [1] Bioconductor
## spam 2.5-1 2019-12-12 [1] CRAN (R 4.0.2)
## sparseMatrixStats 1.2.0 2020-10-27 [1] Bioconductor
## SpatialExperiment 1.0.0 2020-10-27 [1] Bioconductor
## spatialLIBD * 1.2.0 2020-10-29 [1] Bioconductor
## stringi 1.5.3 2020-09-09 [1] CRAN (R 4.0.2)
## stringr 1.4.0 2019-02-10 [1] CRAN (R 4.0.2)
## SummarizedExperiment * 1.20.0 2020-10-27 [1] Bioconductor
## testthat 3.0.0 2020-10-31 [1] CRAN (R 4.0.2)
## tibble 3.0.4 2020-10-12 [1] CRAN (R 4.0.2)
## tidyr 1.1.2 2020-08-27 [1] CRAN (R 4.0.2)
## tidyselect 1.1.0 2020-05-11 [1] CRAN (R 4.0.2)
## tiff 0.1-5 2013-09-04 [1] CRAN (R 4.0.2)
## usethis 1.6.3 2020-09-17 [1] CRAN (R 4.0.2)
## vctrs 0.3.4 2020-08-29 [1] CRAN (R 4.0.2)
## vipor 0.4.5 2017-03-22 [1] CRAN (R 4.0.2)
## viridis 0.5.1 2018-03-29 [1] CRAN (R 4.0.2)
## viridisLite 0.3.0 2018-02-01 [1] CRAN (R 4.0.1)
## withr 2.3.0 2020-09-22 [1] CRAN (R 4.0.2)
## xfun 0.19 2020-10-30 [1] CRAN (R 4.0.2)
## xml2 1.3.2 2020-04-23 [1] CRAN (R 4.0.2)
## xtable 1.8-4 2019-04-21 [1] CRAN (R 4.0.2)
## XVector 0.30.0 2020-10-28 [1] Bioconductor
## yaml 2.2.1 2020-02-01 [1] CRAN (R 4.0.2)
## zlibbioc 1.36.0 2020-10-28 [1] Bioconductor
##
## [1] /Library/Frameworks/R.framework/Versions/4.0/Resources/library
I believe that it’s the junior year in the US.↩︎