BRGenomics 1.11.0
有效地处理多个数据集,我们建议农庄组织对象存储在一个标准,命名列表,如。grl < -列表(a_rep1 = gr1一起,b_rep1 = gr2…)
。
库(BRGenomics)数据(“PROseq”) (“txs_dm6_chr4”)
#让3数据集ps1 < - PROseq (seq(1、长度(PROseq), 3)] ps2 < - PROseq (seq(2、长度(PROseq), 3)] ps3 < - PROseq (seq(3、长度(PROseq), 3)]使用“=”号任务在()给名单列表元素ps_list < -列表(ps1 = ps1, ps2 = ps2, ps3 = ps3)名称(ps_list)
# # [1]“ps1”“ps2”“ps3”
ps_list
# # $ ps1 # #农庄与15794范围和对象元数据列:# # seqnames范围链|得分# # < Rle > < IRanges > < Rle > | <整数> # # [1]chr4 1295 + | 1 # # [2] chr4 42590 + | 2 # # [3] chr4 42595 + | 1 # # [4] chr4 42618 + | 1 # # [5] chr4 42622 + | 2 # #………………# # [15790]chr4 1307114 - | 1 # # [15791] chr4 1307122 - | 1 # # [15792] chr4 1307300 - | 1 # # [15793] chr4 1316537 - | 1 # # [15794] chr4 1319369 - | 1 # # - - - - - - - # # seqinfo: 7因基因组序列# # # # $ ps2 # #农庄与15793范围和对象元数据列:# # seqnames范围链|得分# # < Rle > < IRanges > < Rle > | <整数> # # [1]chr4 41428 + | 1 # # [2] chr4 42593 + | 5 # # [3] chr4 42596 + | 1 # # [4] chr4 42619 + | 2 # # [5] chr4 42652 + | 3 # #………………# # [15789]chr4 1307032 - | 1 # # [15790] chr4 1307115 - | 2 # # [15791] chr4 1307126 - | 1 # # [15792] chr4 1307301 - | 1 # # [15793] chr4 1318960 - | 1 # # - - - - - - - # # seqinfo: 7因基因组序列ps3 # # # # # # $农庄与15793范围和对象元数据列:# # seqnames范围链|得分# # < Rle > < IRanges > < Rle > | <整数> # # [1]chr4 42588 + | 1 # # [2] chr4 42594 + | 2 # # [3] chr4 42601 + | 1 # # [4] chr4 42621 + | 1 # # [5] chr4 42657 + | 1 # #………………# # [15789]chr4 1307075 - | 1 # # [15790] chr4 1307120 - | 1 # # [15791] chr4 1307283 - | 1 # # [15792] chr4 1307742 - | 1 # # [15793] chr4 1319004 - | 1 # # - - - - - - - # # seqinfo: 7从一个未指明的基因组序列
像上面命名列表可以作为参数传递给BRGenomics几乎每一个函数,函数将自动返回dataframes许多人,或者融化dataframes使用列表的名称作为样本名称(可以简化绘图ggplot2
或晶格
)。
注意,BRGenomics也支持使用GRangesList
或CompressedGRangesList
多个数据集类分组。然而,使用这些时应该小心,因为许多功能的方法农庄
对象也有方法GRangesList
对象。此外,GRangesList
对象可以自动强迫CompressedGRangesList
对象,可以降低内存的使用,但也带来了相当大的性能损失。
我们可以直接通过我们的农庄getCountsByRegions
为每个数据集,同时数读取和融化策划的结果ggplot
:
getCountsByRegions (ps_list txs_dm6_chr4 [1:5], ncores = 1)
# # ps1 ps2 ps3 # # 1 1 0 0 # # 2 20 22 17 # # 3 4 4 5 # # 4 36 47 43 # # 5 84 90 89
#融化,并使用可选region_names论点txs_counts < - getCountsByRegions (ps_list txs_dm6_chr4,融化= TRUE, region_names = txs_dm6_chr4 tx_name美元,ncores = 1)头(txs_counts)
示例# # # #区域信号1 FBtr0346692 ps1 # # 2 FBtr0344900 20 ps1 # # 3 FBtr0340499 4 ps1 # # 4 FBtr0333704 36 ps1 # # 84 ps1 FBtr0333705 # # 6 FBtr0100246 1017 ps1
库(ggplot2) ggplot (txs_counts aes (x =样本,y =信号,填补=样本))+ geom_violin theme_bw () + ()
通过使用getCountsByPositions ()
在多个数据集在一个的,我们可以烤自己的基因组浏览器截图在r .使用我们之前绘制的同一地区:
cbp_maxtx < - getCountsByPositions (ps_list txs_dm6_chr4[135],融化= TRUE, ncores = 1)头(cbp_maxtx)
# #区域位置信号样本# # 1 1 1 0 ps1 # # 2 1 2 0 ps1 # # 3 1 3 0 ps1 # # 4 1 4 0 ps1 # # 5 1 5 0 ps1 # # 6 1 6 0 ps1
ggplot (cbp_maxtx aes (x =位置,y =信号))+ facet_wrap(~样,ncol = 1,地带。位置=“正确”)+ geom_col(大小= 0.5,颜色=“darkgray”) + coord_cartesian(扩大= FALSE) +实验室(title = txs_dm6_chr4 tx_name美元[135],x =“TSS的距离”,y =“PRO-seq信号”)+ theme_classic () + (strip.text主题。y = element_text(角= 0),地带。axis.line背景= element_blank ()。x = element_blank (), axis.ticks。x = element_blank ())
还有一个数据结构,与BRGenomics广泛支持,称为多路复用农庄。多路复用农庄是一个农庄组织对象,包含多个元数据字段包含basepair-resolution覆盖率数据为不同的数据集。我们目前推荐用户使用农庄组织列表对象,但你可能会发现,多路复用农庄为您的数据对象有性能优势(笔记)。
可以使用多路复用农庄组织对象mergeGRangesData ()
与选择多路复用= TRUE
。
ps_multi < - mergeGRangesData (ps1, ps2, ps3,多路= TRUE, ncores = 1) ps_multi
与47380年# #农庄对象范围和3元数据列:# # seqnames范围链| ps1 ps2 ps3 # # < Rle > < IRanges > < Rle > | <整数> <整数> <整数> # # [1]chr4 1295 + | 1 0 0 # # [2] chr4 41428 + | 0 1 0 # # [3] chr4 42588 + | 0 0 1 # # [4] chr4 42590 + | 2 0 0 # # [5] chr4 42593 + | 0 5 0 # #……………………# # [47376]chr4 1307742 - | 0 0 1 # # [47377] chr4 1316537 - | 1 0 0 # # [47378] chr4 1318960 - | 0 1 0 # # [47379] chr4 1319004 - | 0 0 1 # # [47380] chr4 1319369 - | 1 0 0 # # - - - - - - - # # seqinfo: 7从一个未指明的基因组序列
为在任何农庄组织对象,元数据字段的dataframe访问mcols ()
功能,单个列的访问美元
操作符。1dataframe,默认情况下,并不是一个基地Rdata.frame
,而是一个S4DataFrame
。最终用户的区别并不重要,它不太可能用户会遇到任何理由强迫使用的类as.data.frame
。
mcols (ps_multi)
# # DataFrame 47380行3列# # ps1 ps2 ps3 # # <整数> <整数> <整数> # # 1 1 0 0 # # 2 0 1 0 0 1 0 # # 3 # # 4 2 0 0 # # 5 0 5 0 # #……47376 0 0 1 # # 47377 # # 1 0 0 0 # # 47379 # # 47378 0 1 0 0 1 1 0 0 # # 47380
ps_multi $ ps1 [1:5] # # [1] 1 0 0 2 0
这个数据结构可以通过在BRGenomics大部分功能。明确,用户应该设置场
参数,当它存在时,设置数据集的计算应该执行:
#所有的数据集(所有字段),得到数量在第一个5成绩单getCountsByRegions (ps_multi, txs_dm6_chr4[1:5],字段名称= (mcols (ps_multi)), ncores = 1)
# # ps1 ps2 ps3 # # 1 1 0 0 # # 2 20 22 17 # # 3 4 4 5 # # 4 36 47 43 # # 5 84 90 89
#获得ps2的计数数据集只有getCountsByRegions (ps_multi, txs_dm6_chr4[1:5]字段=“ps2 ncores = 1)
22 # # [1]0 4 47 90
#如果没有磁场,大多数函数将使用所有字段默认getCountsByRegions (ps_multi, txs_dm6_chr4 [1:5], ncores = 1)
# #领域中没有dataset.gr;将默认为使用在dataset.gr所有字段吗
# # ps1 ps2 ps3 # # 1 1 0 0 # # 2 20 22 17 # # 3 4 4 5 # # 4 36 47 43 # # 5 84 90 89
与PRO-seq数据在我们的经验中,令我们吃惊的是,一个农庄对象列表通常优于多路复用农庄组织在一个典型的笔记本电脑,虽然理论多路复用的好处。
原则上,多路复用农庄组织结构的目的是减少内存使用量和提高性能,但这不是我们的经验在处理稀疏时,像PRO-seq basepair-resolution数据。与感兴趣的区域(例如,在重叠的信号getCountsByRegions ()
或getCountsByPosition ()
)是相对有效的合理大小的农庄组织对象,并与多核处理这些计算规模相当不错。而多路复用意味着信号重叠执行只有一次,我们发现这是一个相对较小的好处在实践中很容易抵消有关信号计算大型稀疏向量的信号。然而,相对使用列表或多路复用的好处很可能取决于数据被分析的性质,以及计算机硬件。
虽然BRGenomics农庄组织数据的处理比较快,权贵的初始输入或bedGraph文件作为农庄对象仍然是一个明显的瓶颈。这可能是可容忍的交互式工作流,数据导入一次经历冗长的分析,但用户的瓶颈是一个重大的损害定期导入数据。
为了避免这种瓶颈,用户可以保存R可重用的数据结构作为二进制文件,有效地节省内存R对象的状态。不仅是这些对象快速加载到内存后进口,但他们储蓄的好处用户从重复数据格式。
任何R对象可以保存到存储使用saveRDS ()
功能和重新使用readRDS ()
。
#保存PRO-seq农庄为以后进口saveRDS (PROseq、文件= ~ / PROseq.RData) #保存一个农庄组织saveRDS列表(ps_list、文件= ~ / ps_list.RData) #导入ps_list < - readRDS (“~ / ps_list.RData”)
的save ()
和load ()
命令也可以用来完成同样的事情,尽管他们工作略有不同。2不像saveRDS ()
/readRDS ()
命令,read ()
/load ()
命令保持原始对象的名称。例如,如果你保存(PROseq文件=“~ / ps.RData”)
,在一个新的R会话运行读(“~ / ps.RData”)
,一个新对象PROseq
将会出现在您的新环境。(注意,这是同样的方式,RStudio保存当前工作环境到磁盘,即它可以节省整个环境到一个RData文件,然后可以重新加载,重塑每个数据对象)。