Implementing custom iSEEindex resources

iSEEindex resources

Overview

iSEEindex imports data sets and initial app configurations from files. Each of those files is represented by a Uniform Resource Identifier (URI) in the lists of metadata returned by the functions supplied to the FUN.datasets and FUN.initial arguments of iSEEindex().

iSEEindex requires each URI to contain a scheme component (Wikipedia ), to identify the type of resource and invoke the associated method for accessing it.

This system allows iSEEindex users to use both standard and custom schemes in the URI of their resources, to fetch files from virtually any logical or physical resource, local or remote.

In this vignette, we describe the implementation of iSEEindex resources, using built-in classes of resources as examples.

Implementation

Given a scheme <scheme>, iSEEindex automatically attempts to create an object of class iSEEindex<Scheme>Resource that contains the class iSEEindexResource. For instance, the scheme https produces an object of class iSEEindexHttpsResource.

iSEEindex provides a range of built-in iSEEindexResource sub-classes, described in dedicated sections below.

The raw value of the URI (including the scheme component) is always stored in the uri slot of the iSEEindexResource object.

Each iSEEindexResource sub-class must define the method precache().

On first use, precache() processes the raw value of the URI, downloads the resource file locally using custom code if necessary, caches the file using BiocFileCache, and returns the path to the cached file.

In subsequent uses, BiocFileCache is used to fetch the cached file directly.

Built-in resources

iSEEindexHttpsResource

This type of resource is documented in help("iSEEindexHttpsResource-class").

Structure

Briefly, this class is used to represent files that are publicly accessible online over HTTPS.

The URI must use the standard scheme “https”, followed by the URI to the file on the internet.

Example:

https://zenodo.org/record/7304331/files/ReprocessedAllenData.rds?download=1

Caching

The BiocFileCache package can handle HTTPS perfectly well.

In this instance, the precache() function has no other job than to cache the file located at the given URI using BiocFileCache.

iSEEindexLocalhostResource

Structure

This type of resource is documented in help("iSEEindexLocalhostResource-class").

Briefly, this class is used to represent files that are already present on the filesystem of the machine that runs the application.

The URI must use the custom scheme “localhost”, followed by the path – absolute or relative – to the file on disk.

Example:

localhost:///absolute/path/to/file
localhost://relative/path/to/file

Caching

Now, while the BiocFileCache package can perfectly well handle local files, it does not know how to deal with the custom scheme localhost.

In this instance, the precache() function has for only job to remove the localhost:// prefix from the URI, and cache the file located at the resulting file path using BiocFileCache.

iSEEindexRcallResource

Structure

This type of resource is documented in help("iSEEindexRcallResource-class").

Briefly, this class is used to represent files whose local file path is obtained as the result of executing R code.

The URI must use the custom scheme “rcall”, followed by the R code to execute.

This custom scheme was created mainly to dynamically fetch the example files distributed and installed with the package.

Example:

rcall://system.file(package='iSEEindex','ReprocessedAllenData_config_01.R')

Caching

The custom scheme rcall is entirely made up for the purpose described here; it is not in any way recognised as a standard scheme by the Internet Assigned Numbers Authority (IANA). As such, the BiocFileCache package cannot possibly know how to handle that custom scheme.

In this instance, the precache() function has the job to remove the rcall:// prefix from the URI, evaluate the remainder of the URI as R code, and cache the file located at the resulting file path using BiocFileCache.

iSEEindexS3Resource

Structure

This type of resource is documented in help("iSEEindexS3Resource-class").

Briefly, this class is used to represent files that are accessible from Amazon S3.

The URI must use the custom scheme “s3”, followed by the S3 URI to the file.

Example:

s3://bucket/prefix/file

Caching

Now, while the scheme s3 is recognised by the AWS Command Line Interface, the BiocFileCache package does not know how to deal with it.

In this instance, the precache() function has the job to parse the URI for information that is passed to the paws.storage package to download the file, which is then cached using BiocFileCache.

iSEEindexRunrResource

Structure

This type of resource is documented in help("iSEEindexRunrResource-class").

This class is used to represent directly objects that are generated via a call to arbitrary R code.

The URI must use the custom scheme “runr”, followed by the code itself to be run to obtain the object to explore.

Example:

runr://function_to_call(param1 = "value1", param2 = "value2")

Caching

As this class does not directly specify a path, but rather focus on the object itself, the classical BiocFileCache-based caching will not work automatically.

Nonetheless, since a typical use case would be to host a collection of datasets provided in a data package, chances are that these packages implement some form of BiocFileCache-enabled caching.

Reproducibility

The iSEEindex package (Rue-Albrecht and Marini, 2024) was made possible thanks to:

This package was developed using biocthis.

Code for creating the vignette

## Create the vignette
library("rmarkdown")
system.time(render("resources.Rmd", "BiocStyle::html_document"))

## Extract the R code
library("knitr")
knit("resources.Rmd", tangle = TRUE)

Date the vignette was generated.

#> [1] "2024-10-30 08:32:54 UTC"

Wallclock time spent generating the vignette.

#> Time difference of 0.144 secs

R session information.

#> ─ Session info ───────────────────────────────────────────────────────────────────────────────────
#>  setting  value
#>  version  R version 4.4.1 (2024-06-14)
#>  os       Ubuntu 24.04.1 LTS
#>  system   x86_64, linux-gnu
#>  ui       X11
#>  language (EN)
#>  collate  C
#>  ctype    en_US.UTF-8
#>  tz       Etc/UTC
#>  date     2024-10-30
#>  pandoc   3.2.1 @ /usr/local/bin/ (via rmarkdown)
#> 
#> ─ Packages ───────────────────────────────────────────────────────────────────────────────────────
#>  package              * version date (UTC) lib source
#>  abind                  1.4-8   2024-09-12 [2] RSPM (R 4.4.0)
#>  backports              1.5.0   2024-05-23 [2] RSPM (R 4.4.0)
#>  bibtex                 0.5.1   2023-01-26 [2] RSPM (R 4.4.0)
#>  Biobase              * 2.67.0  2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  BiocFileCache        * 2.15.0  2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  BiocGenerics         * 0.53.0  2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  BiocManager            1.30.25 2024-08-28 [2] RSPM (R 4.4.0)
#>  BiocStyle            * 2.35.0  2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  bit                    4.5.0   2024-09-20 [2] RSPM (R 4.4.0)
#>  bit64                  4.5.2   2024-09-22 [2] RSPM (R 4.4.0)
#>  blob                   1.2.4   2023-03-17 [2] RSPM (R 4.4.0)
#>  bslib                  0.8.0   2024-07-29 [2] RSPM (R 4.4.0)
#>  buildtools             1.0.0   2024-10-28 [3] local (/pkg)
#>  cachem                 1.1.0   2024-05-16 [2] RSPM (R 4.4.0)
#>  circlize               0.4.16  2024-02-20 [2] RSPM (R 4.4.0)
#>  cli                    3.6.3   2024-06-21 [2] RSPM (R 4.4.0)
#>  clue                   0.3-65  2023-09-23 [2] RSPM (R 4.4.0)
#>  cluster                2.1.6   2023-12-01 [2] RSPM (R 4.4.0)
#>  codetools              0.2-20  2024-03-31 [2] RSPM (R 4.4.0)
#>  colorspace             2.1-1   2024-07-26 [2] RSPM (R 4.4.0)
#>  colourpicker           1.3.0   2023-08-21 [2] RSPM (R 4.4.0)
#>  ComplexHeatmap         2.23.0  2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  crayon                 1.5.3   2024-06-20 [2] RSPM (R 4.4.0)
#>  curl                   5.2.3   2024-09-20 [2] RSPM (R 4.4.0)
#>  DBI                    1.2.3   2024-06-02 [2] RSPM (R 4.4.0)
#>  dbplyr               * 2.5.0   2024-03-19 [2] RSPM (R 4.4.0)
#>  DelayedArray           0.33.1  2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  digest                 0.6.37  2024-08-19 [2] RSPM (R 4.4.0)
#>  doParallel             1.0.17  2022-02-07 [2] RSPM (R 4.4.0)
#>  dplyr                  1.1.4   2023-11-17 [2] RSPM (R 4.4.0)
#>  DT                     0.33    2024-04-04 [2] RSPM (R 4.4.0)
#>  evaluate               1.0.1   2024-10-10 [2] RSPM (R 4.4.0)
#>  fansi                  1.0.6   2023-12-08 [2] RSPM (R 4.4.0)
#>  fastmap                1.2.0   2024-05-15 [2] RSPM (R 4.4.0)
#>  filelock               1.0.3   2023-12-11 [2] RSPM (R 4.4.0)
#>  fontawesome            0.5.2   2023-08-19 [2] RSPM (R 4.4.0)
#>  foreach                1.5.2   2022-02-02 [2] RSPM (R 4.4.0)
#>  generics               0.1.3   2022-07-05 [2] RSPM (R 4.4.0)
#>  GenomeInfoDb         * 1.41.2  2024-10-02 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  GenomeInfoDbData       1.2.13  2024-10-30 [2] Bioconductor
#>  GenomicRanges        * 1.57.2  2024-10-29 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  GetoptLong             1.0.5   2020-12-15 [2] RSPM (R 4.4.0)
#>  ggplot2                3.5.1   2024-04-23 [2] RSPM (R 4.4.0)
#>  ggrepel                0.9.6   2024-09-07 [2] RSPM (R 4.4.0)
#>  GlobalOptions          0.1.2   2020-06-10 [2] RSPM (R 4.4.0)
#>  glue                   1.8.0   2024-09-30 [2] RSPM (R 4.4.0)
#>  gtable                 0.3.6   2024-10-25 [2] RSPM (R 4.4.0)
#>  highr                  0.11    2024-05-26 [2] RSPM (R 4.4.0)
#>  htmltools              0.5.8.1 2024-04-04 [2] RSPM (R 4.4.0)
#>  htmlwidgets            1.6.4   2023-12-06 [2] RSPM (R 4.4.0)
#>  httpuv                 1.6.15  2024-03-26 [2] RSPM (R 4.4.0)
#>  httr                   1.4.7   2023-08-15 [2] RSPM (R 4.4.0)
#>  igraph                 2.1.1   2024-10-19 [2] RSPM (R 4.4.0)
#>  IRanges              * 2.39.2  2024-10-25 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  iSEE                   2.17.4  2024-10-08 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  iSEEindex            * 1.5.0   2024-10-30 [1] https://bioc.r-universe.dev (R 4.4.1)
#>  iterators              1.0.14  2022-02-05 [2] RSPM (R 4.4.0)
#>  jquerylib              0.1.4   2021-04-26 [2] RSPM (R 4.4.0)
#>  jsonlite               1.8.9   2024-09-20 [2] RSPM (R 4.4.0)
#>  knitr                  1.48    2024-07-07 [2] RSPM (R 4.4.0)
#>  later                  1.3.2   2023-12-06 [2] RSPM (R 4.4.0)
#>  lattice                0.22-6  2024-03-20 [2] RSPM (R 4.4.0)
#>  lifecycle              1.0.4   2023-11-07 [2] RSPM (R 4.4.0)
#>  listviewer             4.0.0   2023-09-30 [2] RSPM (R 4.4.0)
#>  lubridate              1.9.3   2023-09-27 [2] RSPM (R 4.4.0)
#>  magrittr               2.0.3   2022-03-30 [2] RSPM (R 4.4.0)
#>  maketools              1.3.1   2024-10-28 [3] Github (jeroen/maketools@d46f92c)
#>  Matrix                 1.7-1   2024-10-18 [2] RSPM (R 4.4.0)
#>  MatrixGenerics       * 1.17.1  2024-10-23 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  matrixStats          * 1.4.1   2024-09-08 [2] RSPM (R 4.4.0)
#>  memoise                2.0.1   2021-11-26 [2] RSPM (R 4.4.0)
#>  mgcv                   1.9-1   2023-12-21 [2] RSPM (R 4.4.0)
#>  mime                   0.12    2021-09-28 [2] RSPM (R 4.4.0)
#>  miniUI                 0.1.1.1 2018-05-18 [2] RSPM (R 4.4.0)
#>  munsell                0.5.1   2024-04-01 [2] RSPM (R 4.4.0)
#>  nlme                   3.1-166 2024-08-14 [2] RSPM (R 4.4.0)
#>  paws.common            0.7.7   2024-10-03 [2] RSPM (R 4.4.0)
#>  paws.storage           0.7.0   2024-09-11 [2] RSPM (R 4.4.0)
#>  pillar                 1.9.0   2023-03-22 [2] RSPM (R 4.4.0)
#>  pkgconfig              2.0.3   2019-09-22 [2] RSPM (R 4.4.0)
#>  plyr                   1.8.9   2023-10-02 [2] RSPM (R 4.4.0)
#>  png                    0.1-8   2022-11-29 [2] RSPM (R 4.4.0)
#>  promises               1.3.0   2024-04-05 [2] RSPM (R 4.4.0)
#>  purrr                  1.0.2   2023-08-10 [2] RSPM (R 4.4.0)
#>  R6                     2.5.1   2021-08-19 [2] RSPM (R 4.4.0)
#>  RColorBrewer           1.1-3   2022-04-03 [2] RSPM (R 4.4.0)
#>  Rcpp                   1.0.13  2024-07-17 [2] RSPM (R 4.4.0)
#>  RefManageR           * 1.4.0   2022-09-30 [2] RSPM (R 4.4.0)
#>  rintrojs               0.3.4   2024-01-11 [2] RSPM (R 4.4.0)
#>  rjson                  0.2.23  2024-09-16 [2] RSPM (R 4.4.0)
#>  rlang                  1.1.4   2024-06-04 [2] RSPM (R 4.4.0)
#>  rmarkdown              2.28    2024-08-17 [2] RSPM (R 4.4.0)
#>  RSQLite                2.3.7   2024-05-27 [2] RSPM (R 4.4.0)
#>  S4Arrays               1.5.11  2024-10-29 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  S4Vectors            * 0.43.2  2024-10-17 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  sass                   0.4.9   2024-03-15 [2] RSPM (R 4.4.0)
#>  scales                 1.3.0   2023-11-28 [2] RSPM (R 4.4.0)
#>  sessioninfo          * 1.2.2   2021-12-06 [2] RSPM (R 4.4.0)
#>  shape                  1.4.6.1 2024-02-23 [2] RSPM (R 4.4.0)
#>  shiny                * 1.9.1   2024-08-01 [2] RSPM (R 4.4.0)
#>  shinyAce               0.4.3   2024-10-19 [2] RSPM (R 4.4.0)
#>  shinydashboard         0.7.2   2021-09-30 [2] RSPM (R 4.4.0)
#>  shinyjs                2.1.0   2021-12-23 [2] RSPM (R 4.4.0)
#>  shinyWidgets           0.8.7   2024-09-23 [2] RSPM (R 4.4.0)
#>  SingleCellExperiment * 1.27.2  2024-10-26 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  SparseArray            1.5.45  2024-10-29 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  stringi                1.8.4   2024-05-06 [2] RSPM (R 4.4.0)
#>  stringr                1.5.1   2023-11-14 [2] RSPM (R 4.4.0)
#>  SummarizedExperiment * 1.35.5  2024-10-29 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  sys                    3.4.3   2024-10-04 [2] RSPM (R 4.4.0)
#>  tibble                 3.2.1   2023-03-20 [2] RSPM (R 4.4.0)
#>  tidyselect             1.2.1   2024-03-11 [2] RSPM (R 4.4.0)
#>  timechange             0.3.0   2024-01-18 [2] RSPM (R 4.4.0)
#>  triebeard              0.4.1   2023-03-04 [2] RSPM (R 4.4.0)
#>  UCSC.utils             1.1.0   2024-10-29 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  urltools               1.7.3   2019-04-14 [2] RSPM (R 4.4.0)
#>  utf8                   1.2.4   2023-10-22 [2] RSPM (R 4.4.0)
#>  vctrs                  0.6.5   2023-12-01 [2] RSPM (R 4.4.0)
#>  vipor                  0.4.7   2023-12-18 [2] RSPM (R 4.4.0)
#>  viridisLite            0.4.2   2023-05-02 [2] RSPM (R 4.4.0)
#>  xfun                   0.48    2024-10-03 [2] RSPM (R 4.4.0)
#>  xml2                   1.3.6   2023-12-04 [2] RSPM (R 4.4.0)
#>  xtable                 1.8-4   2019-04-21 [2] RSPM (R 4.4.0)
#>  XVector                0.45.0  2024-10-02 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  yaml                   2.3.10  2024-07-26 [2] RSPM (R 4.4.0)
#>  zlibbioc               1.51.2  2024-10-21 [2] Bioconductor 3.20 (R 4.4.1)
#> 
#>  [1] /tmp/RtmpUpGneR/Rinst234d75db4efb
#>  [2] /github/workspace/pkglib
#>  [3] /usr/local/lib/R/site-library
#>  [4] /usr/lib/R/site-library
#>  [5] /usr/lib/R/library
#> 
#> ──────────────────────────────────────────────────────────────────────────────────────────────────

Bibliography

This vignette was generated using BiocStyle (Oleś, 2024) with knitr (Xie, 2024) and rmarkdown (Allaire, Xie, Dervieux et al., 2024) running behind the scenes.

Citations made with RefManageR (McLean, 2017).

[1] J. Allaire, Y. Xie, C. Dervieux, et al. rmarkdown: Dynamic Documents for R. R package version 2.28. 2024. URL: https://github.com/rstudio/rmarkdown.

[2] M. W. McLean. “RefManageR: Import and Manage BibTeX and BibLaTeX References in R”. In: The Journal of Open Source Software (2017). DOI: 10.21105/joss.00338.

[3] A. Oleś. BiocStyle: Standard styles for vignettes and other Bioconductor documents. R package version 2.35.0. 2024. URL: https://github.com/Bioconductor/BiocStyle.

[4] R Core Team. R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing. Vienna, Austria, 2024. URL: https://www.R-project.org/.

[5] K. Rue-Albrecht and F. Marini. iSEEindex: iSEE extension for a landing page to a custom collection of data sets. R package version 1.5.0. 2024. URL: https://github.com/iSEE/iSEEindex.

[6] H. Wickham. “testthat: Get Started with Testing”. In: The R Journal 3 (2011), pp. 5–10. URL: https://journal.r-project.org/archive/2011-1/RJournal_2011-1_Wickham.pdf.

[7] H. Wickham, W. Chang, R. Flight, et al. sessioninfo: R Session Information. R package version 1.2.2, https://r-lib.github.io/sessioninfo/. 2021. URL: https://github.com/r-lib/sessioninfo#readme.

[8] Y. Xie. knitr: A General-Purpose Package for Dynamic Report Generation in R. R package version 1.48. 2024. URL: https://yihui.org/knitr/.