Running minimal Shiny app
Running the minimal Shiny app with igvShiny is as simple as:
- providing genome details via
parseAndValidateGenomeSpec
- using
igvShinyOutput
as the UI function
- using
renderIgvShiny
as the server function
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))
}
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/RtmpO0OSSW/Rinst1a0252eb913b/igvShiny/extdata/ribosomal-RNA-gene.fasta"
#>
#> $fastaIndex
#> [1] "/tmp/RtmpO0OSSW/Rinst1a0252eb913b/igvShiny/extdata/ribosomal-RNA-gene.fasta.fai"
#>
#> $initialLocus
#> [1] "U13369.1:7,276-8,225"
#>
#> $annotation
#> [1] "/tmp/RtmpO0OSSW/Rinst1a0252eb913b/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)
}
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):
- load tracks with the following formats/data types:
- Bed
- BedGraph
- Seg
- GWAS
- Bam
- Cram
- Vcf
- GFF3
- showGenomicRegion (zoom in or out to show the nominated region, by
chromosome locus or gene symbol)
- getGenomicRegion (return the current IGV region)
- removeUserAddedTracks (remove tracks from the browser, added during
the session by the user)
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)
}