DelayedDataFrame 1.12.0
基因/基因数据有越来越大的形象,注释文件也变得比预期的要大得多。的内存空间R一直是obstable快速和有效的数据处理,因为大多数可用R或Bioconductor包开发基于内存中的数据操作。一些新开发的数据结构HDF5或GDS,R接口的DelayedArray代表不同的后端磁盘上的数据结构R用户友好的数组数据结构(例如,HDF5Array,GDSArray),高通量基因/基因组数据现在能够轻松地加载和操纵R。然而,注释文件内的样本和特征伸展在数据也开始竟然比以前大。与一个普通的data.frame
或DataFrame
,它仍然是越来越具有挑战性的任何分析中完成的R。我们这里有发达的DelayedDataFrame
,非常相似的特征data.frame
和DataFrame
。但与此同时,所有列数据可以选择保存磁盘上(例如,在DelayedArray结构与任何后端)。常见的操作,比如构造,构造子集,分裂,结合可以相同的方式完成的DataFrame
。这个功能的DelayedDataFrame
能够有效的磁盘读取和处理大规模注释文件,同样,普通胃镜可以节省内存空间DataFrame
隐喻在R和Bioconductor。
下载包Bioconductor:
如果(!requireNamespace (“BiocManager”,悄悄地= TRUE)) install.packages (“BiocManager”) BiocManager::安装(“DelayedDataFrame”)
开发版本也可以通过github下载:
BiocManager:安装(“Bioconductor / DelayedDataFrame”)
包加载到R会话使用前:
库(DelayedDataFrame)
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长度相同
的插槽DelayedDataFrame
可以访问的lazyIndex ()
,nrow ()
,rownames ()
(如果不是零)功能。与新建DelayedDataFrame
对象的初始值lazyIndex
所有列槽将为空。
lazyIndex (ddf) # # lazyIndex长度1 # #[[1]]零# # # # # #每一列的索引:# # [1]1 nrow (ddf) # # [1] 1348 rownames (ddf) # # NULL
lazyIndex
槽的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
,nrows
和rownames
(如果不是零)都更新。因此,构造子集操作的延迟
。
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
返回。我们将介绍以下胁迫方法部分的实现。
常见的方法data.frame
或DataFrame
也定义在DelayedDataFrame
类,所以他们的行为相似DelayedDataFrame
对象。
强制方法之间DelayedDataFrame
和其他数据结构定义。当强迫任何
来DelayedDataFrame
,lazyIndex
槽将会自动添加,与最初的NULL值每一列的索引。
(信件、“DelayedDataFrame”)与26 # # DelayedDataFrame X行和列1 # # # # <人物> # # 1 # # 2 b # # 3 c # #……24 x 25 # # # # # # 26 z
(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]
(
二维(
构造子集上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
,nrows
和rownames
(如果不是零)槽将被更新。
(< - 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]
[[
的[[
构造子集将列下标为整数或字符值,并返回相应的列是原始数据格式。
地区指定基金[[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]
rbind / 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
cbind
的DelayedDataFrame
将所有现有对象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
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