#

annoLinker Vignette: Annotating genomic regions through chromatin interaction links

Jianhong Ou

#### 18 May 2026

#### Abstract

Annotating genomic regions through chromatin interaction networks. Genomic peaks are efficiently annotated by leveraging DNA interaction data to construct interaction graphs with igraph. Each peak overlapping a node within a connected component is annotated with all genes associated with that component, enabling robust propagation of functional associations across the chromatin interaction network.

#### Package

annoLinker 1.1.0

## 1 Introduction

Functional annotation of genomic regions is a key step in understanding regulatory mechanisms underlying gene expression and phenotype variation. Traditional annotation methods typically rely on the linear proximity of genomic features, such as linking peaks to the nearest gene, which can overlook the complex three-dimensional organization of the genome. Recent advances in chromatin conformation capture technologies (e.g., Hi-C, ChIA-PET, PLAC-seq, HiCAR) have revealed that regulatory elements often interact with distant genomic loci through chromatin loops, bringing enhancers, promoters, and other elements into physical contact.

`annoLinker` is designed to bridge this gap by annotating genomic regions through chromatin interaction links. Rather than relying solely on linear genomic distance, `annoLinker` integrates chromatin contact information to establish biologically meaningful connections between regulatory regions and their potential target genes. This approach complements traditional annotation methods by enabling the functional assignment of distal elements such as enhancers and silencers.

The package provides a streamlined workflow to link user-defined genomic regions with genomic interactions (loops), annotate the associated genes, and visualize the resulting interaction networks. By leveraging interaction data, `annoLinker` enables users to explore functional relationships that are invisible in linear genome coordinates and to generate more comprehensive biological interpretations from genomic assays such as ATAC-seq, ChIP-seq, or Methyl-seq.

## 2 Installation

    if (!require("BiocManager", quietly = TRUE)) {
        install.packages("BiocManager")
    }

    BiocManager::install("annoLinker")

## 3 Quick start

The input to `annoLinker` consists of three components: the genomic regions of interest to be annotated, the annotation data, and the chromatin interaction information. Both the peak list and annotation data should be provided as `GRanges` objects, while genomic interactions can be supplied as either `GInteractions` or `Pairs` objects.

By default, `annoLinker` annotates peaks that fall within the promoter region, defined as 5 kb upstream to 5 kb downstream of the annotated features. Users can optionally modify this definition to annotate regions within the gene body or downstream segments instead.

The output is returned as an `annoLinkerResult` object, which can be easily converted into a `GRanges` or `data.frame` for downstream analysis and visualization.

    library(annoLinker)
    library(rtracklayer)
    library(TxDb.Drerio.UCSC.danRer10.refGene)
    library(org.Dr.eg.db)

    txdb <- TxDb.Drerio.UCSC.danRer10.refGene
    org <- org.Dr.eg.db
    extPath <- system.file("extdata", package = "annoLinker")
    ## load peaks
    peaks <- rtracklayer::import(file.path(extPath, "peaks.bed"))
    ## load interactions
    interactions <- rtracklayer::import(file.path(extPath, "interaction.bedpe"))
    ## load annotation data
    annoData <- genes(txdb)
    anno <- annoLinker(peaks, annoData, interactions, verbose = TRUE)
    class(anno)

    ## [1] "annoLinkerResult"
    ## attr(,"package")
    ## [1] "annoLinker"

    head(anno, n = 2)

    ## GRanges object with 2 ranges and 7 metadata columns:
    ##       seqnames            ranges strand | feature_name feature_start
    ##          <Rle>         <IRanges>  <Rle> |  <character>     <integer>
    ##   [1]     chr1 45062825-45063844      * |    100151507      44660095
    ##   [2]     chr1 45062825-45063844      * |    100038798      45052323
    ##       feature_end feature_strand     gene_id               peak_bin
    ##         <integer>          <Rle> <character>            <character>
    ##   [1]    44674627              +   100151507 chr1:45060001-45070000
    ##   [2]    45060215              -   100038798 chr1:45060001-45070000
    ##                  feature_bin
    ##                  <character>
    ##   [1] chr1:44660001-44670000
    ##   [2] chr1:45050001-45060000
    ##   -------
    ##   seqinfo: 2 sequences from an unspecified genome; no seqlengths

    anno_peaks(anno)[c(1, 2)]

    ## GRanges object with 2 ranges and 7 metadata columns:
    ##       seqnames            ranges strand | feature_name feature_start
    ##          <Rle>         <IRanges>  <Rle> |  <character>     <integer>
    ##   [1]     chr1 45062825-45063844      * |    100151507      44660095
    ##   [2]     chr1 45062825-45063844      * |    100038798      45052323
    ##       feature_end feature_strand     gene_id               peak_bin
    ##         <integer>          <Rle> <character>            <character>
    ##   [1]    44674627              +   100151507 chr1:45060001-45070000
    ##   [2]    45060215              -   100038798 chr1:45060001-45070000
    ##                  feature_bin
    ##                  <character>
    ##   [1] chr1:44660001-44670000
    ##   [2] chr1:45050001-45060000
    ##   -------
    ##   seqinfo: 2 sequences from an unspecified genome; no seqlengths

    head(as(anno, "GRanges"), n = 2)

    ## GRanges object with 2 ranges and 7 metadata columns:
    ##       seqnames            ranges strand | feature_name feature_start
    ##          <Rle>         <IRanges>  <Rle> |  <character>     <integer>
    ##   [1]     chr1 45062825-45063844      * |    100151507      44660095
    ##   [2]     chr1 45062825-45063844      * |    100038798      45052323
    ##       feature_end feature_strand     gene_id               peak_bin
    ##         <integer>          <Rle> <character>            <character>
    ##   [1]    44674627              +   100151507 chr1:45060001-45070000
    ##   [2]    45060215              -   100038798 chr1:45060001-45070000
    ##                  feature_bin
    ##                  <character>
    ##   [1] chr1:44660001-44670000
    ##   [2] chr1:45050001-45060000
    ##   -------
    ##   seqinfo: 2 sequences from an unspecified genome; no seqlengths

The `plotEvidence()` function allows users to visualize the annotation evidence chain, illustrating how genomic regions are linked through chromatin interactions. Users can plot the annotation evidence as either a network graph or a genomic track integrated with gene annotation information.

    ## plot the evidence for the first annotation
    plotEvidence(anno,
        event = 1,
        output = "htmlWidget"
    )

    plotEvidence(anno,
        event = 1,
        output = "trackPlot",
        txdb = TxDb.Drerio.UCSC.danRer10.refGene,
        org = org.Dr.eg.db
    )

    ## viewport[GRID.VP.83]

## 4 SessionInfo

    ## R version 4.6.0 Patched (2026-05-01 r89994)
    ## Platform: aarch64-apple-darwin23
    ## Running under: macOS Tahoe 26.3.1
    ##
    ## Matrix products: default
    ## BLAS:   /Library/Frameworks/R.framework/Versions/4.6/Resources/lib/libRblas.0.dylib
    ## LAPACK: /Library/Frameworks/R.framework/Versions/4.6/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.1
    ##
    ## locale:
    ## [1] C/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
    ##
    ## time zone: America/New_York
    ## tzcode source: internal
    ##
    ## attached base packages:
    ## [1] stats4    stats     graphics  grDevices utils     datasets  methods
    ## [8] base
    ##
    ## other attached packages:
    ##  [1] org.Dr.eg.db_3.22.0
    ##  [2] TxDb.Drerio.UCSC.danRer10.refGene_3.4.6
    ##  [3] GenomicFeatures_1.65.0
    ##  [4] AnnotationDbi_1.75.0
    ##  [5] Biobase_2.73.1
    ##  [6] rtracklayer_1.73.0
    ##  [7] GenomicRanges_1.65.0
    ##  [8] Seqinfo_1.3.0
    ##  [9] IRanges_2.47.1
    ## [10] S4Vectors_0.51.2
    ## [11] BiocGenerics_0.59.2
    ## [12] generics_0.1.4
    ## [13] annoLinker_1.1.0
    ## [14] BiocStyle_2.41.0
    ##
    ## loaded via a namespace (and not attached):
    ##   [1] strawr_0.0.92               RColorBrewer_1.1-3
    ##   [3] rstudioapi_0.18.0           jsonlite_2.0.0
    ##   [5] magrittr_2.0.5              magick_2.9.1
    ##   [7] farver_2.1.2                rmarkdown_2.31
    ##   [9] BiocIO_1.23.3               vctrs_0.7.3
    ##  [11] memoise_2.0.1               Rsamtools_2.29.0
    ##  [13] RCurl_1.98-1.18             base64enc_0.1-6
    ##  [15] tinytex_0.59                htmltools_0.5.9
    ##  [17] S4Arrays_1.13.0             BiocBaseUtils_1.15.1
    ##  [19] progress_1.2.3              curl_7.1.0
    ##  [21] Rhdf5lib_2.1.0              rhdf5_2.57.0
    ##  [23] SparseArray_1.13.2          Formula_1.2-5
    ##  [25] sass_0.4.10                 parallelly_1.47.0
    ##  [27] bslib_0.11.0                htmlwidgets_1.6.4
    ##  [29] Gviz_1.57.0                 httr2_1.2.2
    ##  [31] cachem_1.1.0                GenomicAlignments_1.49.0
    ##  [33] igraph_2.3.1                lifecycle_1.0.5
    ##  [35] pkgconfig_2.0.3             Matrix_1.7-5
    ##  [37] R6_2.6.1                    fastmap_1.2.0
    ##  [39] MatrixGenerics_1.25.0       future_1.70.0
    ##  [41] digest_0.6.39               colorspace_2.1-2
    ##  [43] Hmisc_5.2-5                 RSQLite_3.52.0
    ##  [45] filelock_1.0.3              progressr_0.19.0
    ##  [47] httr_1.4.8                  abind_1.4-8
    ##  [49] compiler_4.6.0              bit64_4.8.0
    ##  [51] htmlTable_2.5.0             S7_0.2.2
    ##  [53] backports_1.5.1             BiocParallel_1.47.0
    ##  [55] DBI_1.3.0                   biomaRt_2.69.0
    ##  [57] rappdirs_0.3.4              DelayedArray_0.39.2
    ##  [59] rjson_0.2.23                tools_4.6.0
    ##  [61] foreign_0.8-91              otel_0.2.0
    ##  [63] future.apply_1.20.2         nnet_7.3-20
    ##  [65] glue_1.8.1                  restfulr_0.0.16
    ##  [67] InteractionSet_1.41.0       rhdf5filters_1.25.0
    ##  [69] grid_4.6.0                  checkmate_2.3.4
    ##  [71] cluster_2.1.8.2             gtable_0.3.6
    ##  [73] BSgenome_1.81.0             trackViewer_1.49.0
    ##  [75] ensembldb_2.37.0            data.table_1.18.4
    ##  [77] hms_1.1.4                   XVector_0.53.0
    ##  [79] pillar_1.11.1               stringr_1.6.0
    ##  [81] dplyr_1.2.1                 BiocFileCache_3.3.0
    ##  [83] lattice_0.22-9              deldir_2.0-4
    ##  [85] bit_4.6.0                   biovizBase_1.61.0
    ##  [87] tidyselect_1.2.1            Biostrings_2.81.1
    ##  [89] knitr_1.51                  gridExtra_2.3
    ##  [91] bookdown_0.46               ProtGenerics_1.45.0
    ##  [93] SummarizedExperiment_1.43.0 xfun_0.57
    ##  [95] matrixStats_1.5.0           visNetwork_2.1.4
    ##  [97] stringi_1.8.7               UCSC.utils_1.9.0
    ##  [99] lazyeval_0.2.3              yaml_2.3.12
    ## [101] evaluate_1.0.5              codetools_0.2-20
    ## [103] cigarillo_1.3.0             interp_1.1-6
    ## [105] tibble_3.3.1                BiocManager_1.30.27
    ## [107] cli_3.6.6                   rpart_4.1.27
    ## [109] jquerylib_0.1.4             dichromat_2.0-0.1
    ## [111] Rcpp_1.1.1-1.1              GenomeInfoDb_1.49.0
    ## [113] globals_0.19.1              grImport_0.9-7
    ## [115] dbplyr_2.5.2                png_0.1-9
    ## [117] XML_3.99-0.23               parallel_4.6.0
    ## [119] ggplot2_4.0.3               blob_1.3.0
    ## [121] prettyunits_1.2.0           jpeg_0.1-11
    ## [123] latticeExtra_0.6-31         AnnotationFilter_1.37.0
    ## [125] bitops_1.0-9                txdbmaker_1.9.0
    ## [127] listenv_0.10.1              VariantAnnotation_1.59.0
    ## [129] scales_1.4.0                crayon_1.5.3
    ## [131] rlang_1.2.0                 KEGGREST_1.53.0