1 igvShiny

The igvShiny package is a wrapper of Integrative Genomics Viewer (IGV). It comprises an htmlwidget version of IGV. It can be used as a module in Shiny apps.

2 Installation

if (!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")

BiocManager::install("igvShiny")

3 Loading the package

library(igvShiny)

4 Running minimal Shiny app

Running the minimal Shiny app with igvShiny is as simple as:

The he minimal Shiny app make look like:

library(igvShiny)
options <- parseAndValidateGenomeSpec(genomeName="hg38",  initialLocus="NDUFS2")
if (interactive()) {
    ui <- shinyUI(fluidPage(igvShinyOutput('igvShiny'), width = 10))
    server <-
        function(input, output, session) {
            output$igvShiny <- renderIgvShiny({
                igvShiny(options)
            })
            }
    runApp(shinyApp(ui = ui, server = server))
    }

5 Providing genome details

Multiple genomes are currently supported by IGV: link. In igvShiny this set of genomes is called stock genomes. One can select any stock genome easily by running parseAndValidateGenomeSpec with single genomeName value properly assigned. For example to use the most popular mouse genome one need to run:

igvShiny::parseAndValidateGenomeSpec("mm10")
#> $stockGenome
#> [1] TRUE
#> 
#> $dataMode
#> [1] NA
#> 
#> $validated
#> [1] TRUE
#> 
#> $genomeName
#> [1] "mm10"
#> 
#> $initialLocus
#> [1] "all"
#> 
#> $fasta
#> [1] NA
#> 
#> $fastaIndex
#> [1] NA
#> 
#> $annotation
#> [1] NA

The list of available stock genomes in igvShiny can be found with:

igvShiny::get_css_genomes()
#>  [1] "hs1"             "chm13v1.1"       "hg38"            "hg38_1kg"       
#>  [5] "hg19"            "hg18"            "mm39"            "mm10"           
#>  [9] "mm9"             "rn7"             "rn6"             "gorGor6"        
#> [13] "gorGor4"         "panTro6"         "panTro5"         "panTro4"        
#> [17] "macFas5"         "GCA_011100615.1" "panPan2"         "canFam6"        
#> [21] "canFam5"         "canFam4"         "canFam3"         "bosTau9"        
#> [25] "bosTau8"         "susScr11"        "galGal6"         "GCF_016699485.2"
#> [29] "danRer11"        "danRer10"        "ce11"            "dm6"            
#> [33] "dm3"             "dmel_r5.9"       "sacCer3"         "ASM294v2"       
#> [37] "ASM985889v3"     "tair10"          "GCA_003086295.2" "GCF_001433935.1"
#> [41] "NC_016856.1"     "GCA_000182895.1"

See also demo app for stock genomes when one can select genome of interest and familiarize with the basic functionalities provided via igvShiny:

library(igvShiny)
demo_app_file <- system.file(package= "igvShiny", "demos", "stockGenomesDemo.R")
    if (interactive()) {
        shiny::runApp(demo_app_file)
        }

It’s also possible to use custom genomes (i.e. non-stock genomes). In such cases one has to provide data for: FASTA file, FASTA index file and genome annotation file. The files can provided as local paths (dataMode = localFiles or via URLs (dataMode = http). See below the examples for both cases.

library(igvShiny)

# defining custom genome with data provided via URLs
base_url <- "https://gladki.pl/igvr/testFiles"
title <- "ribo remote"
fasta_file <- sprintf("%s/%s", base_url, "ribosomal-RNA-gene.fasta")
fastaIndex_file <- sprintf("%s/%s", base_url, "ribosomal-RNA-gene.fasta.fai")
annotation_file <- sprintf("%s/%s", base_url, "ribosomal-RNA-gene.gff3")
locus <- "U13369.1:7,276-8,225"
genomeOptions <- parseAndValidateGenomeSpec(
    genomeName = title,
    initialLocus = locus,
    stockGenome = FALSE,
    dataMode = "http",
    fasta = fasta_file,
    fastaIndex = fastaIndex_file,
    genomeAnnotation = annotation_file
    )
genomeOptions
#> $stockGenome
#> [1] FALSE
#> 
#> $dataMode
#> [1] "http"
#> 
#> $validated
#> [1] TRUE
#> 
#> $genomeName
#> [1] "ribo remote"
#> 
#> $fasta
#> [1] "https://gladki.pl/igvr/testFiles/ribosomal-RNA-gene.fasta"
#> 
#> $fastaIndex
#> [1] "https://gladki.pl/igvr/testFiles/ribosomal-RNA-gene.fasta.fai"
#> 
#> $initialLocus
#> [1] "U13369.1:7,276-8,225"
#> 
#> $annotation
#> [1] "https://gladki.pl/igvr/testFiles/ribosomal-RNA-gene.gff3"

# defining custom genome with data provided with local files
data_directory <- system.file(package = "igvShiny", "extdata")
fasta_file      <- file.path(data_directory, "ribosomal-RNA-gene.fasta")
fastaIndex_file <- file.path(data_directory, "ribosomal-RNA-gene.fasta.fai")
annotation_file <- file.path(data_directory, "ribosomal-RNA-gene.gff3")
genomeOptions2 <- parseAndValidateGenomeSpec(
    genomeName = "ribo local",
    initialLocus = "U13369.1:7,276-8,225",
    stockGenome = FALSE,
    dataMode = "localFiles",
    fasta = fasta_file,
    fastaIndex = fastaIndex_file,
    genomeAnnotation = annotation_file
    )
genomeOptions2
#> $stockGenome
#> [1] FALSE
#> 
#> $dataMode
#> [1] "localFiles"
#> 
#> $validated
#> [1] TRUE
#> 
#> $genomeName
#> [1] "ribo local"
#> 
#> $fasta
#> [1] "/tmp/RtmpXFotF1/Rinst1eb0527fdd22f3/igvShiny/extdata/ribosomal-RNA-gene.fasta"
#> 
#> $fastaIndex
#> [1] "/tmp/RtmpXFotF1/Rinst1eb0527fdd22f3/igvShiny/extdata/ribosomal-RNA-gene.fasta.fai"
#> 
#> $initialLocus
#> [1] "U13369.1:7,276-8,225"
#> 
#> $annotation
#> [1] "/tmp/RtmpXFotF1/Rinst1eb0527fdd22f3/igvShiny/extdata/ribosomal-RNA-gene.gff3"

See also demo apps for custom genomes with data provided via URLs:

library(igvShiny)
demo_app_file <- system.file(
    package = "igvShiny", 
    "demos", 
    "igvShinyDemo-customGenome-http.R"
    )
if (interactive()) {
    shiny::runApp(demo_app_file)
    }

as well as data provided via local files:

library(igvShiny)
demo_app_file <-
    system.file(
        package = "igvShiny", 
        "demos", 
        "igvShinyDemo-customGenome-localFiles.R")
if (interactive()) {
    shiny::runApp(demo_app_file)
    }

6 Main functionalities

In principle igvShiny provides the same functionalities that one can find in igv.js. In summary following actions are currently possible (wrapped as the R helpers):

See also demo app to familiarize with the basic functionalities provided by igvShiny:

library(igvShiny)
demo_app_file <- system.file(package= "igvShiny", "demos", "igvShinyDemo.R")
if (interactive()) {
    shiny::runApp(demo_app_file)
    }

7 Session Info

sessionInfo()
#> R version 4.4.1 (2024-06-14)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 22.04.4 LTS
#> 
#> Matrix products: default
#> BLAS:   /home/biocbuild/bbs-3.19-bioc/R/lib/libRblas.so 
#> LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.10.0
#> 
#> locale:
#>  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
#>  [3] LC_TIME=en_GB              LC_COLLATE=C              
#>  [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       
#> 
#> time zone: America/New_York
#> tzcode source: system (glibc)
#> 
#> attached base packages:
#> [1] stats4    stats     graphics  grDevices utils     datasets  methods  
#> [8] base     
#> 
#> other attached packages:
#> [1] igvShiny_1.0.5       shiny_1.9.1          GenomicRanges_1.56.1
#> [4] GenomeInfoDb_1.40.1  IRanges_2.38.1       S4Vectors_0.42.1    
#> [7] BiocGenerics_0.50.0  BiocStyle_2.32.1    
#> 
#> loaded via a namespace (and not attached):
#>  [1] sass_0.4.9              futile.options_1.0.1    stringi_1.8.4          
#>  [4] digest_0.6.37           magrittr_2.0.3          evaluate_0.24.0        
#>  [7] bookdown_0.40           fastmap_1.2.0           jsonlite_1.8.8         
#> [10] backports_1.5.0         formatR_1.14            promises_1.3.0         
#> [13] BiocManager_1.30.25     httr_1.4.7              UCSC.utils_1.0.0       
#> [16] scales_1.3.0            randomcoloR_1.1.0.1     jquerylib_0.1.4        
#> [19] cli_3.6.3               rlang_1.1.4             XVector_0.44.0         
#> [22] futile.logger_1.4.3     munsell_0.5.1           cachem_1.1.0           
#> [25] yaml_2.3.10             Rtsne_0.17              tools_4.4.1            
#> [28] checkmate_2.3.2         colorspace_2.1-1        httpuv_1.6.15          
#> [31] GenomeInfoDbData_1.2.12 lambda.r_1.2.4          curl_5.2.2             
#> [34] R6_2.5.1                mime_0.12               lifecycle_1.0.4        
#> [37] zlibbioc_1.50.0         stringr_1.5.1           V8_5.0.0               
#> [40] htmlwidgets_1.6.4       cluster_2.1.6           bslib_0.8.0            
#> [43] later_1.3.2             glue_1.7.0              Rcpp_1.0.13            
#> [46] xfun_0.47               knitr_1.48              xtable_1.8-4           
#> [49] htmltools_0.5.8.1       rmarkdown_2.28          compiler_4.4.1