1介绍

基因/基因数据有越来越大的形象,注释文件也变得比预期的要大得多。的内存空间R一直是obstable快速和有效的数据处理,因为大多数可用RBioconductor包开发基于内存中的数据操作。一些新开发的数据结构HDF5GDS,R接口的DelayedArray代表不同的后端磁盘上的数据结构R用户友好的数组数据结构(例如,HDF5Array,GDSArray),高通量基因/基因组数据现在能够轻松地加载和操纵R。然而,注释文件内的样本和特征伸展在数据也开始竟然比以前大。与一个普通的data.frameDataFrame,它仍然是越来越具有挑战性的任何分析中完成的R。我们这里有发达的DelayedDataFrame,非常相似的特征data.frameDataFrame。但与此同时,所有列数据可以选择保存磁盘上(例如,在DelayedArray结构与任何后端)。常见的操作,比如构造,构造子集,分裂,结合可以相同的方式完成的DataFrame。这个功能的DelayedDataFrame能够有效的磁盘读取和处理大规模注释文件,同样,普通胃镜可以节省内存空间DataFrame隐喻在RBioconductor

2安装

下载包Bioconductor:

如果(!requireNamespace (“BiocManager”,悄悄地= TRUE)) install.packages (“BiocManager”) BiocManager::安装(“DelayedDataFrame”)

开发版本也可以通过github下载:

BiocManager:安装(“Bioconductor / DelayedDataFrame”)

包加载到R会话使用前:

库(DelayedDataFrame)

3DelayedDataFrame类

3.1类扩展

DelayedDataFrame扩展了DataFrame数据结构,一个额外的插槽lazyIndex,保存所有数据的映射索引每一列在里面DelayedDataFrame。它类似于data.frame在建筑方面,构造子集,分裂,结合…rownames有相同的功能DataFrame。它不会自动被给予,但只在构造函数显式地指定DelayedDataFrame (row.names =…)或使用槽setter函数< - rownames ()

在这里,我们使用GDSArray数据作为例子来显示DelayedDataFrame特征。GDSArray是一个Bioconductor包代表GDS来源于文件作为对象DelayedArray包和DelayedArray类。它带有磁盘上的数据路径和代表GDS中的节点DelayedArray派生的数据结构。

GDSArray ()构造函数需要两个参数:文件路径和GDS在GDS文件节点名。

库(GDSArray) # #加载所需的包:gdsfmt文件< - SeqArray:: seqExampleFileName (gds) gdsnodes(文件)# #[1]”样本。id”“变体。id”# #[3]“位置”“染色体”# #[5]“等位基因”“基因型/数据“# #[7]”基因型/ ~”“基因型/额外的数据。指数”# #[9]“基因型/额外的“阶段/数据“# #”[11]阶段/ ~”“阶段/额外的数据。指数" ## [13] "phase/extra" "annotation/id" ## [15] "annotation/qual" "annotation/filter" ## [17] "annotation/info/AA" "annotation/info/AC" ## [19] "annotation/info/AN" "annotation/info/DP" ## [21] "annotation/info/HM2" "annotation/info/HM3" ## [23] "annotation/info/OR" "annotation/info/GP" ## [25] "annotation/info/BN" "annotation/format/DP/data" ## [27] "annotation/format/DP/~data" "sample.annotation/family" varid <- GDSArray(file, "annotation/id") DP <- GDSArray(file, "annotation/info/DP")

我们使用一个普通的字符的矢量和GDSArray对象来构造一个DelayedDataFrame对象。

地区指定基金< - DelayedDataFrame (varid, DP) # #只有容纳1 d GDSArrays长度相同

3.2槽访问器

的插槽DelayedDataFrame可以访问的lazyIndex (),nrow (),rownames ()(如果不是零)功能。与新建DelayedDataFrame对象的初始值lazyIndex所有列槽将为空。

lazyIndex (ddf) # # lazyIndex长度1 # #[[1]]零# # # # # #每一列的索引:# # [1]1 nrow (ddf) # # [1] 1348 rownames (ddf) # # NULL

3.3lazyIndex

lazyIndex槽是在LazyIndex中定义的类,它是DelayedDataFrame包和扩展了SimpleList类。的listData槽拯救唯一索引的列,指数槽保存指数的位置listData为每个列槽DelayedDataFrame对象。在上面的例子中,一个初始的建设DelayedDataFrame对象,每个列的索引都是零,和所有3列点的NULL值坐在第一个位置listData槽的lazyIndex

lazyIndex (ddf) @listData # # # #([1])零lazyIndex (ddf) @index # # [1] 1 1

每当完成一个操作(例如,构造子集)listData槽内DelayedDataFrame保持不变,但lazyIndex槽将被更新,以便显示方法,进一步统计计算将应用于构造子集数据集。例如,在这里我们的子集DelayedDataFrame对象地区指定基金只保留第一个5行,看看如何lazyIndex的工作原理。如下所示,构造子集后,listData槽中ddf1保持一样的地区指定基金。但构造子集的操作记录lazyIndex槽,槽的lazyIndex,nrowsrownames(如果不是零)都更新。因此,构造子集操作的延迟

ddf1 < -地区指定基金[1:20,]相同(ddf@listData ddf1@listData) # #[1]真正lazyIndex (ddf1) # # lazyIndex长度1 # # # #([1])[1]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # # # #每一列的索引:# # [1]1 nrow (ddf1) # # 20 [1]

只有当之类的函数DataFrame (),或as.list (),lazyIndex将意识到,DelayedDataFrame返回。我们将介绍以下胁迫方法部分的实现。

4DelayedDataFrame方法

常见的方法data.frameDataFrame也定义在DelayedDataFrame类,所以他们的行为相似DelayedDataFrame对象。

4.1强制方法

强制方法之间DelayedDataFrame和其他数据结构定义。当强迫任何DelayedDataFrame,lazyIndex槽将会自动添加,与最初的NULL值每一列的索引。

  • 从矢量
(信件、“DelayedDataFrame”)与26 # # DelayedDataFrame X行和列1 # # # # <人物> # # 1 # # 2 b # # 3 c # #……24 x 25 # # # # # # 26 z
  • 从DataFrame
(DataFrame(字母),“DelayedDataFrame”) # # DelayedDataFrame 1 26行和列# #信# # <人物> # # 1 # # 2 b # # 3 c # #……24 x 25 # # # # # # 26 z
  • 从列表
(<——(列表(a = 1:5, b = 6:10),“DelayedDataFrame”)) # # DelayedDataFrame 5行和2 b列# # # # <整数> <整数> # # 1 1 6 # 7 # # # 2 2 3 3 8 # # 4 4 9 # # 5 5 10 lazyIndex (a) # # lazyIndex长度1 # #[[1]]零# # # # # #每一列的索引:# # [1]1 1

当强迫DelayedDataFrame到其他数据结构lazyIndex槽将会意识到和返回的新的数据结构。例如,当DelayedDataFrame是强迫DataFrame对象,listData根据槽将被更新lazyIndex槽。

df1 <——(ddf1 DataFrame) df1@listData # # $ varid # # < 20 >数组类DelayedArray和类型的“性格”:# # [1][2][3]。[19]# #“rs111751804”“rs114390380”“rs1320571”。“rs61751002”# # [20] # #“rs6691840”# # # # $ DP # # < 20 >数组类DelayedArray和类型的“整数”:# # [1][2][3][4]。[17][18][19][20]# # 3251 2676 7610 3383。6040 6589 5089 6871暗(df1) # # 20 2 [1]

4.2构造子集的方法

4.2.1构造子集的(

二维(构造子集上DelayedDataFrame对象由整数、字符,所有的工作逻辑值。

  • 整数下标。
地区指定基金(1 = FALSE)下降1 # # DelayedDataFrame 1348行和列# # varid # # rs111751804 < GDSArray > # # 1 # # 2 rs114390380 rs1320571 # # 3 # #……# # # 1347 # 1346 rs8135982 rs116581756 rs5771206 # # 1348
  • 字符下标(列名)。
地区指定基金(“迪拜”,下降= FALSE) # # DelayedDataFrame包含1348行和列# # DP # # < GDSArray > # # 3251 # 7610 # 2676 # # 3 # #……# # 1346 # 1257 # 1347 # 823 # 1348 48
  • 逻辑下标。
地区指定基金[c(真、假),下降= FALSE) # # DelayedDataFrame包含1348行和列# # varid # # rs111751804 < GDSArray > # # 1 # # 2 rs114390380 rs1320571 # # 3 # #……# # # 1347 # 1346 rs8135982 rs116581756 rs5771206 # # 1348

当构造子集使用(在一个已经子集DelayedDataFrame对象,lazyIndex,nrowsrownames(如果不是零)槽将被更新。

(< - ddf1 [1:10, 2 = FALSE]) # # DelayedDataFrame 1 10行和列# # DP # # < DelayedArray > # # 3251 # 7610 # 2676 # # 3 # #……# # 9605 # 9076 # # 9 # 9707 lazyIndex (a) # # lazyIndex长度1 # # # #([1])[1]1 2 3 4 5 6 7 8 9 10 # # # #每一列的索引:# # [1]1 nrow (a) # # 10 [1]

4.2.2构造子集的[[

[[构造子集将列下标为整数或字符值,并返回相应的列是原始数据格式。

地区指定基金[[1]]# # < 1348 >数组类GDSArray和类型的“性格”:# # [1][2][3]。[1347]# #“rs111751804”“rs114390380”“rs1320571”。“rs116581756”# # [1348] # #“rs5771206”地区指定基金[[“varid”]] # # < 1348 >数组类GDSArray和类型的“性格”:# # [1][2][3]。[1347]# #“rs111751804”“rs114390380”“rs1320571”。“rs116581756”# # [1348] # #“rs5771206”相同(地区指定基金[[1]],地区指定基金[[“varid”]]) # # [1]

4.3rbind / cbind

在做rbind,lazyIndex输入参数将会意识到和一个新的DelayedDataFrame与将返回NULL lazyIndex。

ddf2 < -地区指定基金[21:40,](ddfrb < - rbind (ddf1 ddf2)) # # DelayedDataFrame 40行2列# # varid DP # # < DelayedArray > < DelayedArray > rs111751804 # # 3251 # # 2676 # # 7610 # # rs1320571 rs114390380………rs1886116 # # 3641 # # 39 rs115917561 3089 # # 4109 rs61751016 lazyIndex (ddfrb) # # lazyIndex长度1 # #[[1]]零# # # # # #每一列的索引:# # [1]1 1

cbindDelayedDataFrame将所有现有对象lazyIndex输入参数和携带到新的DelayedDataFrame对象。

(ddfcb < - cbind (varid = ddf1 (, 1 = FALSE)下降,DP = ddf1下降(,2 = FALSE)) # # DelayedDataFrame # # varid DP 20行和2列。DP # # < DelayedArray > < DelayedArray > rs111751804 # # 3251 # # 2676 # # 7610 # # rs1320571 rs114390380………19 rs61751002 18 rs115614983 6589 # # # # 5089 # # 20 rs6691840 6871 lazyIndex (ddfcb) # # lazyIndex长度1 # # # #([1])[1]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # # # #每一列的索引:# # [1]1 1

5sessionInfo

sessionInfo () # # R版本4.2.0 RC (2022-04-19 r82224) # #平台:x86_64-pc-linux-gnu(64位)# #下运行:Ubuntu 20.04.4 LTS # # # #矩阵产品:默认# #布拉斯特区:/home/biocbuild/bbs - 3.15 - bioc / R / lib / libRblas。所以# # LAPACK: /home/biocbuild/bbs - 3.15 - bioc / R / lib / libRlapack。# # # #语言环境:# # [1]LC_CTYPE = en_US。utf - 8 LC_NUMERIC = C # #[3]而= 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 = C LC_TELEPHONE = # # [11] LC_MEASUREMENT = en_US。utf - 8 LC_IDENTIFICATION = C附加基本包:# # # # # # [1]stats4统计图形grDevices跑龙套数据集方法# # # # # #[8]基地其他附加包:# # [1]GDSArray_1.16.0 gdsfmt_1.32.0 DelayedDataFrame_1.12.0 # # [4] DelayedArray_0.22.0 IRanges_2.30.0 MatrixGenerics_1.8.0 # # [7] matrixStats_0.62.0 Matrix_1.4-1 S4Vectors_0.34.0 # # [10] BiocGenerics_0.42.0 BiocStyle_2.24.0 # # # #通过加载一个名称空间(而不是附加):# # [1]XVector_0.36.0 GenomeInfoDb_1.32.0 bslib_0.3.1 # # [4] compiler_4.2.0 BiocManager_1.30.17 jquerylib_0.1.4 # # [7] zlibbioc_1.42.0 bitops_1.0-7 tools_4.2.0 # # [10] digest_0.6.29 jsonlite_1.8.0 evaluate_0.15 # # [13] lattice_0.20-45 rlang_1.0.2 cli_3.3.0 # # [16] SeqArray_1.36.0 yaml_2.3.5 parallel_4.2.0 # # [19] xfun_0.30 fastmap_1.1.0 GenomeInfoDbData_1.2.8 # # [22] stringr_1.4.0 knitr_1.38 Biostrings_2.64.0 # # [25] sass_0.4.1 grid_4.2.0 R6_2.5.1 # # [28] rmarkdown_2.14 bookdown_0.26 magrittr_2.0.3 # # [31] htmltools_0.5.2 GenomicRanges_1.48.0 stringi_1.7.6 # # [34] rcurl_1.98 - 1.6 crayon_1.5.1