内容

1简介

该软件包设计用于使用可变IP进行基因调控分析(GRAVI)工作流,作为检测ChIP-Seq数据集中差异绑定的方法。由于工作流集中于数据集成,大部分功能由包提供extraChIPs旨在实现跨数据集的比较。这个小插图主要是看函数的工作GenomicRanges对象。

2安装

为了使用这个包extraChIPs按照这个小插图,我们建议使用这个包BiocManager由CRAN主持。安装完成后,此小插图所需的附加包(tidyverseplyranges而且Gviz)也可安装。

如果(!"BiocManager" %in% rownames(installed.packages())) install.packages("BiocManager") BiocManager::install(c("tidyverse", "plyranges", "Gviz")) BiocManager::install("extraChIPs")

3.强迫

的出现tidyverse已经导致了宠物猫对象成为常用的替代data.frameDataFrame对象。简单的函数extraChIP农庄GInteractions而且DataFrame对象来标记对象,并正确处理列表列。默认情况下,这些强制函数将强制执行农庄元素转换为字符向量。同样的,农庄表示为字符列的对象可以强制转换为的ranges元素农庄对象。

首先,我们从a宠物猫(或S3data.frame)到农庄

library(tidyverse) library(extraChIPs) set.seed(73) df <- tibble(range = c("chr1:1-10:+", "chr1:5-10:+", "chr1:5-6:+"), gene_id = "gene1", tx_id = paste0("transcript", 1:3), score = runif(3)) df .seed(73) df <- tibble(range = c("chr1:1-10:+", "chr1:5-6:+"
## # A tibble: 3 × 4 ## range gene_id tx_id score ##     ## 1 chr1:1-10:+ gene1 transcript1 0.442 ## 2 chr1:5-10:+ gene1 transcript2 0.0831 ## 3 chr1:5-6:+ gene1 transcript3 0.615
gr <- colToRanges(df, "range"
## seqnames ranges strand | gene_id tx_id score ##    |    ## [1] chr1 1-10 + | gene1 transcript1 0.4423369 ## [2] chr1 5-6 + | gene1 transcript2 0.0831099 ## [3] chr1 5-6 + | gene1 transcript3 0.6146112 ## ------- ## seqinfo: 1序列来自一个未指定的基因组;没有seqlengths

强制返回到宠物猫将在默认情况下将范围放置为字符列。但是,这是可以关闭和常规强制从as.data.frame将被应用,内部包装as_tibble ()

as_tibble (gr)
## # A tibble: 3 × 4 ## range gene_id tx_id score ##     ## 1 chr1:1-10:+ gene1 transcript1 0.442 ## 2 chr1:5-10:+ gene1 transcript2 0.0831 ## 3 chr1:5-6:+ gene1 transcript3 0.615
as_tibble(gr, rangeAsChar = FALSE)
## # A tibble: 3 × 8 ## seqnames start end width strand gene_id tx_id score ##         ## 1 chr1 1 10 10 + gene1 transcript1 0.442 ## 2 chr1 5 10 6 + gene1 transcript2 0.0831 ## 3 chr1 5 6 2 + gene1 transcript3 0.615

一个简单的特征,可能是有用的打印基因名称使用rmarkdown包含在collapseGenes ().在这里,一个基因名称的字符向量被折叠成胶水长度为'的对象,默认情况下基因名称以斜体显示。

gn <- c("Gene1", "Gene2", "Gene3") collapseGenes(gn)

Gene1Gene2而且Gene3

4共识峰值的形成

包含多个重复范围的共识峰值的形成是许多ChIP-Seq分析的关键部分。工具返回的常见格式,如mcas2 callpeaknarrowPeak(或broadPeak)的格式。跨多个复制的这些集合可以使用该函数导入importPeaks (),该函数返回GRangesList ()

Fl <- system。文件(c(“extdata / ER_1。narrowPeak", "extdata/ER_2.narrowPeak"), package = "extraChIPs" ) peaks <- importPeaks(fl) names(peaks) <- c("ER_1", "ER_2")

在上面,我们加载了T-47D细胞中雌激素受体(ER)的两个重复的峰值。为了形成共识峰,我们可以对重叠峰需要出现的重复数量进行限制。缺省情况下,该函数makeConsensus ()将比例设置为零(p = 0)所以所有的峰都被保留了。请注意,每个复制都会返回一个逻辑向量/列,以及得出共识峰值的复制数。

makeConsensus(峰值)
14 # #农庄对象范围和3元数据列:# # seqnames范围链| ER_1 ER_2 n # # < Rle > < IRanges > < Rle > | <逻辑> <逻辑> <数字> # # [1]chr1 856458 - 856640 * |真假1 # # [2]chr1 868541 - 868839 * |假真的1 # # [3]chr1 1008550 - 1008550 * |真的真的2 # # [4]chr1 1014770 - 1014770 * |真的真的2 # # [5]chr1 1051307 - 1051307 * 2 |真的如此  ## ... ... ... ... . ... ... ...## [10] chr1 1608098- 1690641 * | TRUE TRUE 1 ## [11] 1690733 -1790975 * | TRUE FALSE 1 ## [14] chr1 1878927-1879257 * | TRUE TRUE 2 ## [14] chr1 1900588-1900902 * | TRUE FALSE 1 ## ------- ## seqinfo: 1个来自未指定基因组的序列;没有seqlengths

然而,我们可能希望在所有重复中出现峰值,因此我们可以设置参数P = 1(或任何其他值\(0 \leq p \leq 1\)).

makeConsensus(峰值,p = 1)
与6和3 # #农庄对象元数据列:# # seqnames范围链| ER_1 ER_2 n # # < Rle > < IRanges > < Rle > | <逻辑> <逻辑> <数字> # # [1]chr1 1008550 - 1008550 * |真的真的2 # # [2]chr1 1014770 - 1014770 * |真的真的2 # # [3]chr1 1051307 - 1051307 * |真的真的2 # # [4]chr1 1368372 - 1368372 * |真的真的2 # # [5]chr1 1608098 - 1608098 * |真的真的2 # # [6]chr1 1878927 - 1878927 * 2 |真的如此  ## ------- ## seqinfo: 1从一个未指明的基因组序列;没有seqlengths

此外,我们可能希望从mcols作为我们共识高峰的一部分,比如qValue.属性可以指定var参数,并返回一个CompressedListreduceMC (),见下图。

makeConsensus(峰值,p = 1, var = "qValue")
GRanges对象有6个范围和4个元数据列:# # seqnames范围链| qValue ER_1 ER_2 # # < Rle > < IRanges > < Rle > | < NumericList > <逻辑> <逻辑> # # [1]chr1 1008550 - 1008550 * | 635.748,605.040真正真正的# # [2]chr1 1014770 - 1014770 * 95.1223 | 78.3953真正真正的# # [3]chr1 1051307 - 1051307 * 65.5538 | 95.9677真正真正的# # [4]chr1 1368372 - 1368372 * 22.5483 | 29.1231真正真正的# # [5]chr1 1608098 - 1608098 * 72.3235 | 64.8439真正真正的# # [6]chr1 1878927 - 1878927 * | 33.8900, 14.4909真的真的n # # # # <数字> # # 2 # # [1][2]2 # # [3]2## [4] 2 ## [5] 2 ## [6] 2 ## ------- ## seqinfo: 1个来自未知基因组的序列;没有seqlengths

我们甚至可以确定峰值中心,并将其传递给下游峰值重新中心的共识峰值集。

库(plyranges)峰值%>% endoapply(突变,中心=开始+峰值)%>% makeConsensus(p = 1, var = "中心")
GRanges对象有6个范围和4个元数据列:# # seqnames范围链|中心ER_1 ER_2 # # < Rle > < IRanges > < Rle > | < NumericList > <逻辑> <逻辑> # # [1]chr1 1008550 - 1008550 * | 1008550, 1009212真真正的# # [2]chr1 1014770 - 1014770 * | 1014770, 1014949真真正的# # [3]chr1 1051307 - 1051307 * | 1051307, 1051634真真正的# # [4]chr1 1368372 - 1368372 * | 1368372, 1368767真真正的# # [5]chr1 1608098 - 1608098 * | 1608098, 1608247真真正的# # [6]chr1 1878927 - 1878927 * | 1878927, 1879094真真正n # # # # <数字> # # 2 # # [1][2]2 # # [3]2## [4] 2 ## [5] 2 ## [6] 2 ## ------- ## seqinfo: 1个来自未知基因组的序列;没有seqlengths

然后我们可以找到平均中心的峰值中心的平均值。

峰值%>% endoapply(突变,中心=开始+峰值)%>% makeConsensus(p = 1, var = "中心")%>% mutate(中心= vapply(中心,均值,数值(1))))
GRanges对象有6个范围和4个元数据列:# # seqnames范围链|中心ER_1 ER_2 n # # < Rle > < IRanges > < Rle > | <数字> <逻辑> <逻辑> <数字> # # [1]chr1 1008550 - 1008550 * | 1008550真正的真正的2 # # [2]chr1 1014770 - 1014770 * | 1014770真正的真正的2 # # [3]chr1 1051307 - 1051307 * | 1051307真正的真正的2 # # [4]chr1 1368372 - 1368372 * | 1368372真正的真正的2 # # [5]chr1 1608098 - 1608098 * | 1608098真正的真正的2 # # [6]chr1 2 1878927 - 1878927 * | 1878927真的如此  ## ------- ## seqinfo: 1从一个未指明的基因组序列;没有seqlengths

5简单操作mcols ()

在包中实现的标准集操作GenomicRanges总是会删除mcols元素。的extraChIPs功能reduceMC ()setdiffMC ()intersectMC ()而且unionMC ()它们都产生与其名称相似的函数相同的输出,但是mcols ()查询对象中的元素也会返回。在需要的地方,列被强制转换成CompressedList列。当需要将初始范围中包含的信息传播到后续的分析步骤时,这尤其有用

5.1简化单农庄对象

为一组转录本定义TSS区域的经典方法是使用函数调整() ',设置宽度为1。

TSS <- resize(gr, width = 1
## seqnames ranges strand | gene_id tx_id score ##    |    ## [1] chr1 1 + | gene1 transcript1 0.4423369 ## [2] chr1 5 + b| gene1 transcript2 0.0831099 ## [3] chr1 5 + | gene1 transcript3 0.6146112 ## ------- # seqinfo: 1序列来自一个未指定的基因组;没有seqlengths

正如我们所看到的,两个转录本从位置5开始,所以我们可以选择减少这个位置,这样会失去mcols元素。另一种选择reduceMC ()将保留所有mcols

GenomicRanges::减少(tss)
## seqnames ranges strand ##    ## [1] chr1 1 + ## [2] chr1 5 + ## ------- ## seqinfo:来自未指定基因组的1个序列;没有seqlengths
reduceMC (tss)
## seqnames ranges strand | gene_id tx_id ##    |   ## [1] chr1 1 + b| gene1 transcript1 ## [2] chr1 5 + | gene1 transcript2,transcript3 ##分数##  ## [1] 0.442337 ## [2] 0.0831099,0.6146112 ## ------- # seqinfo: 1序列来自一个未指定的基因组;没有seqlengths

默认情况下,该函数将尝试强制执行mcols到一个新的mcol当不可避免地出现多个值时,例如tx_id上面的列,这些将被强制转换为aCompressedList.中所见的多个值的简化gene_id如果重复值对下游分析很重要,也可以关闭。

reduceMC(tss, simplify = FALSE)
## seqnames ranges strand | gene_id tx_id ##    |   ## [1] chr1 1 + b| gene1 transcript1 ## [2] chr1 5 + | gene1,gene1 transcript2,transcript3 ##分数##  ## [1] 0.442337 ## [2] 0.0831099,0.6146112 ## ------- # seqinfo: 1序列来自一个未指定的基因组;没有seqlengths

这允许与的简单集成tidyverse嵌套策略。

reduceMC(tss, simplify = FALSE) %>% as_tibble() %>% unnest(everything())
## # A tibble: 3 × 4 ## range gene_id tx_id score ##     ## 1 chr1:1:+ gene1 transcript1 0.442 ## 2 chr1:5:+ gene1 transcript2 0.0831 ## 3 chr1:5:+ gene1 transcript3 0.615

同时reduceMC依赖于在GenomicRanges:减少(),包括一些替代方法,如chopMC (),它查找相同的范围并将McOls元素嵌套为CompressedList对象。

chopMC (tss)
## seqnames ranges strand | gene_id tx_id ##    |   ## [1] chr1 1 + b| gene1 transcript1 ## [2] chr1 5 + | gene1 transcript2,transcript3 ##分数##  ## [1] 0.442337 ## [2] 0.0831099,0.6146112 ## ------- # seqinfo: 1序列来自一个未指定的基因组;没有seqlengths

在对象的情况下tss,则输出为reduceMC (),然而,鉴于没有相同的范围gr这两个函数在该对象上的行为非常不同。

最后一个化简操作农庄对象是distinctMC ()哪个是包装器dplyr]::截然不同结合范围和mcols.要搜索的列可以称为using<数据屏蔽>方法详见手册。

distinctMC (tss)
## seqnames ranges strand ##    ## [1] chr1 1 + ## [2] chr1 5 + ## ------- ## seqinfo:来自未指定基因组的1个序列;没有seqlengths
gene_id distinctMC (tss)
## seqnames ranges strand | gene_id ##    |  ## [1] chr1 1 + | gene1 ## [2] chr1 5 + | gene1 ## ------- ## seqinfo: 1个来自未指定基因组的序列;没有seqlengths

5.2操作设置为2农庄对象

同时减少/ reduceMC是否应用于单个农庄对象的集合操作函数相交setdiff而且联盟是比较范围的有价值的方法。使用* MC ()功能将保留mcols元素查询范围

peaks <- GRanges(c("chr1:1-5", "chr1:9-12:*")) peaks$peak_id <- c("peak1", "peak2") GenomicRanges::intersect(gr, peaks, ignore。strand = TRUE)
## seqnames ranges strand ##    ## [1] chr1 1-5 * ## [2] chr1 9-10 * ## ------- ## seqinfo: 1个来自未指定基因组的序列;没有seqlengths
intersectMC(gr, peaks,忽略。strand = TRUE)
## seqnames ranges strand | gene_id ##    |  ## [1] chr1 1-5 * b| gene1 ## [2] chr1 9-10 * | gene1 ## tx_id score ##   ## [1] transcript1,transcript2,transcript3 0.4423369,0.0831099,0.6146112 ## [2] transcript1,transcript2 0.4423369,0.0831099 ## ------- # seqinfo: 1序列来自一个未指定的基因组;没有seqlengths
setdiffMC(gr, peaks, ignore。strand = TRUE)
## seqnames ranges strand | gene_id ##    |  ## [1] chr1 6-8 * | gene1 ## tx_id score ##   ## [1] transcript1,transcript2,transcript3 0.4423369,0.0831099,0.6146112 ## ------- # seqinfo: 1序列来自一个未指定的基因组;没有seqlengths
unionMC(gr, peaks,忽略。strand = TRUE)
## seqnames ranges strand | gene_id ##    |  ## [1] chr1 -12 * | gene1 ## tx_id score ##   ## [1] transcript1,transcript2,transcript3 0.4423369,0.0831099,0.6146112 ## ------- # seqinfo: 1序列来自一个未指定的基因组;没有seqlengths

准备mcols有一个性能开销CompressedList对象和所有mcols将在查询对象中返回。如果只希望保留一个子集mcols,这些应该在传递给这些函数之前被选择。

gr %>% select(tx_id) %>% intersectMC(峰值,忽略。strand = TRUE)
## seqnames ranges strand | tx_id ##    |  ## [1] chr1 1-5 * | transcript1,transcript2,transcript3 ## [2] chr1 9-10 * | transcript1,transcript2 ## ------- ## seqinfo: 1个来自未指定基因组的序列;没有seqlengths

5.3重叠的比例

而函数findOverlaps ()而且overlapsAny ()都极其有用,加上什么propOverlap ()返回一个数字向量,其中包含每个查询范围(x),与主题范围(y

propOverlap (gr,山峰)
## [1] 0.7 0.5 0.5

这也被扩展为能够跨多个特征进行比较,并根据其重叠最强的特征对每个峰值进行分类。

bestOverlap(gr, peaks, var = "peak_id")
##[1]“peak1”“peak2”“peak1”

6更复杂的操作

6.1范围分区

除了标准的集合操作,还可以使用一组范围划分另一组范围,返回mcols两个范围都有。查询范围(x)在被主题范围(y).用于分区的主题范围必须不重叠,如果提供了重叠范围,则会在分区之前减少重叠范围。

这样就可以从查询范围(x),其重叠范围从主题范围(y)在这种方法下,mcols从两个查询而且主题将返回范围,以启用两组范围内公共和不同的明确范围。

partitionRanges (gr,山峰)
5个范围和4个元数据列的GRanges对象:# # seqnames范围链| peak_id gene_id # # < Rle > < IRanges > < Rle > | <人物> <人物> # # [1]chr1 1 - 5 + | peak1 gene1 # # [2] chr1 5 + | peak1 gene1 # # [3] chr1 6 + | < NA > gene1 # # [4] chr1 6 - 8 + | < NA > gene1 # # [5] chr1 9 + | peak2 gene1 # # tx_id得分# # < CharacterList > < NumericList > # # [1] transcript1 0.442337 # # [2] transcript2, transcript3 0.0831099, 0.6146112 # # [3] transcript3 0.614611 # # [4] transcript1, transcript2 0.4423369, 0.0831099 # # [5] transcript1, transcript20.4423369,0.0831099 ## ------- ## seqinfo: 1个来自未指定基因组的序列;没有seqlengths

而这与intersectMC ()额外的功能提供了更大的灵活性。

partitionRanges(gr, peaks) %>%子集(is.na(peak_id))
## seqnames ranges strand | peak_id gene_id ##    |   ## [1] chr1 6 + |  gene1 ## [2] chr1 6-8 + |  gene1 ## tx_id score ##  

6.2缝合范围

使用函数stitchRanges ()我们能够将附近的范围集合连接在一起,但可以选择在范围之间放置明确的障碍物,越过这些障碍物范围就无法连接。如果连接增强子形成假定的超增强子,但显式地省略已定义的启动子区域,这可能是有用的。

enh <- GRanges(c("chr1:1-10", "chr1:101-110", "chr1:181-200")) prom <- GRanges("chr1:150:+") se <- stitchRanges(enh, exclude = prom, maxgap = 100) se
## seqnames ranges strand ##    ## [1] chr1 1-110 * ## [2] chr1 181-200 * ## ------- ## seqinfo: 1个来自未指定基因组的序列;没有seqlengths

如图所示,100bp以内的范围被缝合在一起,然而,被定义为“启动子”的区域充当了一个屏障,并且范围没有通过这个屏障缝合在一起。

7会话信息

sessionInfo ()
## R正在开发中(不稳定)(2022-12-10 r83428) ##平台:x86_64-pc-linux-gnu(64位)##运行在Ubuntu 22.04.1 LTS ## ##矩阵产品:默认## BLAS: /home/biocbuild/bbs-3.17-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_phone = c# # [11] LC_MEASUREMENT=en_US。UTF-8 LC_IDENTIFICATION=C ## ##时区:美国/New_York ## tzcode源代码:系统(glibc) ## ##附加的基本包:## [1]stats4 stats graphics grDevices utils datasets methods ##[8]基础## ##其他附加包:# # # # [1] plyranges_1.19.0 extraChIPs_1.3.4 [3] rtracklayer_1.59.0 BiocParallel_1.33.7 # # [5] csaw_1.33.0 SummarizedExperiment_1.29.1 # # [7] Biobase_2.59.0 MatrixGenerics_1.11.0 # # [9] matrixStats_0.63.0 Rsamtools_2.15.0 # # [11] Biostrings_2.67.0 XVector_0.39.0 # # [13] GenomicRanges_1.51.4 GenomeInfoDb_1.35.8 # # [15] IRanges_2.33.0 S4Vectors_0.37.3 # # [17] BiocGenerics_0.45.0 forcats_0.5.2 # # [19] stringr_1.5.0 dplyr_1.0.10 # # [21] purrr_0.3.5 readr_2.1.3 # # [23] tidyr_1.2.1 tibble_3.1.8 # # [25]ggplot2_3.4.0 tidyverse_1.3.2 ## [27] BiocStyle_2.27.0 ## ## loaded via a namespace (and not attached): ## [1] splines_4.3.0 BiocIO_1.9.1 ## [3] bitops_1.0-7 filelock_1.0.2 ## [5] cellranger_1.1.0 polyclip_1.10-4 ## [7] reprex_2.0.2 XML_3.99-0.13 ## [9] rpart_4.1.19 lifecycle_1.0.3 ## [11] edgeR_3.41.2 doParallel_1.0.17 ## [13] MASS_7.3-58.1 ensembldb_2.23.1 ## [15] lattice_0.20-45 backports_1.4.1 ## [17] magrittr_2.0.3 limma_3.55.1 ## [19] Hmisc_4.7-2 sass_0.4.4 ## [21] rmarkdown_2.19 jquerylib_0.1.4 ## [23] yaml_2.3.6 metapod_1.7.0 ## [25] ggside_0.2.2 Gviz_1.43.0 ## [27] DBI_1.1.3 RColorBrewer_1.1-3 ## [29] lubridate_1.9.0 zlibbioc_1.45.0 ## [31] rvest_1.0.3 AnnotationFilter_1.23.0 ## [33] biovizBase_1.47.0 RCurl_1.98-1.9 ## [35] nnet_7.3-18 tweenr_2.0.2 ## [37] VariantAnnotation_1.45.0 rappdirs_0.3.3 ## [39] circlize_0.4.15 GenomeInfoDbData_1.2.9 ## [41] ggrepel_0.9.2 codetools_0.2-18 ## [43] DelayedArray_0.25.0 ggforce_0.4.1 ## [45] xml2_1.3.3 tidyselect_1.2.0 ## [47] shape_1.4.6 futile.logger_1.4.3 ## [49] farver_2.1.1 ComplexUpset_1.3.3 ## [51] BiocFileCache_2.7.1 base64enc_0.1-3 ## [53] googledrive_2.0.0 GenomicAlignments_1.35.0 ## [55] jsonlite_1.8.4 GetoptLong_1.0.5 ## [57] ellipsis_0.3.2 Formula_1.2-4 ## [59] survival_3.4-0 iterators_1.0.14 ## [61] foreach_1.5.2 tools_4.3.0 ## [63] progress_1.2.2 Rcpp_1.0.9 ## [65] glue_1.6.2 gridExtra_2.3 ## [67] xfun_0.35 withr_2.5.0 ## [69] formatR_1.12 BiocManager_1.30.19 ## [71] fastmap_1.1.0 latticeExtra_0.6-30 ## [73] fansi_1.0.3 digest_0.6.31 ## [75] timechange_0.1.1 R6_2.5.1 ## [77] colorspace_2.0-3 jpeg_0.1-10 ## [79] dichromat_2.0-0.1 biomaRt_2.55.0 ## [81] RSQLite_2.2.19 googlesheets4_1.0.1 ## [83] utf8_1.2.2 generics_0.1.3 ## [85] data.table_1.14.6 InteractionSet_1.27.0 ## [87] prettyunits_1.1.1 httr_1.4.4 ## [89] htmlwidgets_1.6.0 pkgconfig_2.0.3 ## [91] gtable_0.3.1 blob_1.2.3 ## [93] ComplexHeatmap_2.15.0 htmltools_0.5.4 ## [95] bookdown_0.31 ProtGenerics_1.31.0 ## [97] clue_0.3-63 scales_1.2.1 ## [99] png_0.1-8 lambda.r_1.2.4 ## [101] knitr_1.41 rstudioapi_0.14 ## [103] tzdb_0.3.0 rjson_0.2.21 ## [105] checkmate_2.1.0 curl_4.3.3 ## [107] cachem_1.0.6 GlobalOptions_0.1.2 ## [109] parallel_4.3.0 foreign_0.8-84 ## [111] AnnotationDbi_1.61.0 restfulr_0.0.15 ## [113] pillar_1.8.1 grid_4.3.0 ## [115] vctrs_0.5.1 dbplyr_2.2.1 ## [117] cluster_2.1.4 htmlTable_2.4.1 ## [119] evaluate_0.19 magick_2.7.3 ## [121] VennDiagram_1.7.3 EnrichedHeatmap_1.29.2 ## [123] GenomicFeatures_1.51.4 futile.options_1.0.1 ## [125] cli_3.4.1 locfit_1.5-9.6 ## [127] compiler_4.3.0 rlang_1.0.6 ## [129] crayon_1.5.2 labeling_0.4.2 ## [131] modelr_0.1.10 interp_1.1-3 ## [133] fs_1.5.2 stringi_1.7.8 ## [135] viridisLite_0.4.1 deldir_1.0-6 ## [137] assertthat_0.2.1 munsell_0.5.0 ## [139] lazyeval_0.2.2 Matrix_1.5-3 ## [141] BSgenome_1.67.1 hms_1.1.2 ## [143] patchwork_1.1.2 bit64_4.0.5 ## [145] KEGGREST_1.39.0 highr_0.9 ## [147] haven_2.5.1 igraph_1.3.5 ## [149] gargle_1.2.1 broom_1.0.2 ## [151] memoise_2.0.1 bslib_0.4.2 ## [153] bit_4.0.5 readxl_1.4.1 ## [155] GenomicInteractions_1.33.0