内容

1简介

该包为HDF5的R接口。一方面,它实现了R从C接口到许多低级函数的接口。另一方面,它提供了高级的方便功能R级别,使使用HDF5文件更容易。

HDF5包的安装rhdf5的当前版本(>3.5.0)R(www.r-project.org)。在安装R上运行以下命令R命令shell安装rhdf5

install.packages(“BiocManager”)BiocManager::安装(“rhdf5”)

2高级R-HDF5功能

2.1创建HDF5文件和组层次结构

创建一个空的HDF5文件

库(rhdf5) h5createFile(“myhdf5file.h5”)

HDF5文件可以包含一个组层次结构。我们创建了许多组,然后列出文件内容。

h5createGroup("myhdf5file.h5","foo") h5createGroup("myhdf5file.h5","baa") h5createGroup("myhdf5file.h5","foo/foobaa") h5ls("myhdf5file.h5")
##组名otype dclass dim ## 0 / baa H5I_GROUP ## 1 /foo H5I_GROUP ## 2 /foo foobaa H5I_GROUP ## 2 /foo foobaa H5I_GROUP ## 0 / baa H5I_GROUP ## 1 /foo foobaa H5I_GROUP ## 2 /foo foobaa H5I_GROUP

2.2写入和读取对象

对象可以写入HDF5文件。如果附加到对象的属性也会被写入write.attributes = TRUE给出的参数是h5write。请注意,并非所有R-attributes可以写成HDF5属性。

A = matrix(1:10,nr=5,nc=2) h5write(A, "myhdf5file.h5","foo/A") B = array(seq(0.1,2.0,by=0.1),dim=c(5,2,2)) attr(B, "scale") <- "升" h5write(B, "myhdf5file.h5","foo/B") c= matrix(paste(LETTERS[1:10],LETTERS[11:20], collapse="" "), nr=2,nc=5) h5write(c," myhdf5file.h5","foo/foobaa/ c ") df = data.frame(1L:5L,seq(0,1,length.out=5), c("ab","cde","fghi"," A","s"), stringsAsFactors=FALSE) h5write(df, "myhdf5file.h5","df") h5ls("myhdf5file.h5")
## group name otype dclass dim ## 0 / baa h5i_group# # 1 / df h5i_group# # 3 /foo A H5I_DATASET INTEGER 5 * 2 ## 4 /foo B H5I_DATASET FLOAT 5 * 2 * 2 ## 5 /foo foobaa h5i_group# # 6 /foo/foobaa C H5I_DATASET STRING 2 * 5
D = h5read("myhdf5file.h5","foo/A") E = h5read("myhdf5file.h5","foo/B") F = h5read("myhdf5file.h5","foo/foobaa/C") G = h5read("myhdf5file.h5","df")

如果数据集具有给定的的名字在HDF5文件中创建了一个数据集,对象obj写入HDF5文件。如果数据集具有给定的的名字已经存在,且数据类型和维度与对象相同obj时,文件中的数据将被覆盖。如果数据集已经存在,并且数据类型或维度不同,则h5write ()失败。

2.3用文件、组和数据集句柄写入和读取对象

文件、组和数据集句柄是读取(部分写入)HDF5文件的一种更简单的方法。打开文件H5Fopen

h5f = H5Fopen("myhdf5file.h5") h5f
## HDF5文件##名称/ ##文件名## ##类型dclass名称dim ## 0 baa H5I_GROUP ## 1 df H5I_DATASET COMPOUND 5 ## 2 foo H5I_GROUP

而且操作符可用于访问下一个组级别。而操作符从磁盘读取对象,即运算符返回一个组或数据集句柄。

h5f df美元
# # X1L。5L seq.0..1..length.out...5. c..ab....cde....fghi....a....s.. ## 1 1 0.00 ab ## 2 2 0.25 cde ## 3 3 0.50 fghi ## 4 4 0.75 a ## 5 5 1.00 s
h5f&“df”
## HDF5数据集##名称/df ##文件名##类型H5T_COMPOUND ## rank ## size 5 ## maxsize 5

下面的代码行都返回矩阵C。但是请注意,第一个版本读取整个树/ foo在内存中,然后子集到/ foobaa / C,第二个版本只读取矩阵C。第一个h5f $ foo $ foobaa $ C读取数据集,另一个是列表的访问器。请注意,这可能会对大型数据集和数据结构造成严重后果。

h5f $ foo $ foobaa $ C
# # # #[1][2][1]“KB LC MD NE PG QH RI SJ T”“KB LC MD NE PG QH RI SJ T”# #[2]“KB LC MD NE PG QH RI SJ T”“KB LC MD NE PG QH RI SJ T”# # # #[3][4][1]“KB LC MD NE PG QH RI SJ T”“KB LC MD NE PG QH RI SJ T”# #[2]“KB LC MD NE PG QH RI SJ T”“KB LC MD NE PG QH RI SJ T”# # # #(5)[1]“KB LC MD NE PG QH RI SJ T”# #[2]“KB LC MD NE PG QH RI SJ T”
h5f“美元/ foo / foobaa / C”
# # # #[1][2][1]“KB LC MD NE PG QH RI SJ T”“KB LC MD NE PG QH RI SJ T”# #[2]“KB LC MD NE PG QH RI SJ T”“KB LC MD NE PG QH RI SJ T”# # # #[3][4][1]“KB LC MD NE PG QH RI SJ T”“KB LC MD NE PG QH RI SJ T”# #[2]“KB LC MD NE PG QH RI SJ T”“KB LC MD NE PG QH RI SJ T”# # # #(5)[1]“KB LC MD NE PG QH RI SJ T”# #[2]“KB LC MD NE PG QH RI SJ T”

也可以返回一个矩阵的数据集句柄,然后以块的形式读取矩阵进行内存不足的计算。

h5d = h5f&"/foo/B" h5d[]
# #, 1 # # # #[1][2] # #(1) 0.1 - 0.6 # #(2) 0.2 - 0.7 # #【3】0.3 - 0.8 # # (4)0.4 - 0.9 0.5 - 1.0 # # [5]  ## ## , , 2 # # # # # #[1][2][1] 1.1 - 1.6 # #(2) 1.2 - 1.7 # #【3】1.3 - 1.8 # #【4】1.4 - 1.9 1.5 - 2.0 # # [5]
h5d [3,)
## [,1] [,2] ## [1,] 0.3 1.3 ## [2,] 0.8

这同样适用于写入数据集。

h5d[3,,] = 1:4 H5Fflush(h5f)

再次提醒,在下面的代码中,第一个版本不会改变磁盘上的数据,但第二个版本会。

h5f$foo$B = 101:120

关闭所有不再使用的数据集、组和文件句柄是很重要的

H5Dclose (h5d) H5Fclose (h5f)

或关闭环境中所有打开的HDF5句柄

h5closeAll ()

rhdf5包提供了两种设置方法。函数指定子矩阵R样式索引列表或HDF5样式超面板。注意,下面的两个例子展示了读写相同子矩阵的两种方法。在编写子集或超标记之前,必须在HDF5文件中创建全维数据集。这可以通过像Section中那样写入一次全维数组或创建一个数据集来实现。然后,可以按顺序写入数据集。

所选择的块大小和压缩级别对读取和写入时间以及生成的文件大小有很大的影响。在示例中,大小为10e7的整数向量被写入HDF5文件。文件被写入大小为10 ' 000的子向量。块大小的定义不仅影响读取时间,也影响写入时间。如果块大小比实际使用的要小得多或大得多,则运行时性能会急剧下降。此外,由于开销,对于较小的块大小,文件大小更大。当块大小非常大时,压缩可以更有效。下图演示了一个小型玩具数据集的运行时和文件大小行为作为块大小的函数。

数据集创建完成后,可以将数据顺序写入HDF5文件。构造子集在R样式需要参数index的指定h5read ()而且h5write ()

h5createDataset(“myhdf5file。h5”,“foo/S”,c(5,8),存储。Mode =" integer", chunk=c(5,1), level=7) h5write(matrix(1:5,nr=5,nc=1), file="myhdf5file. "h5", name="foo/S", index=list(NULL,1)) h5read("myhdf5file. h ", name="foo/S", index=list(NULL,1))h5”、“foo / S”)
# # [1] [2] [3] [4] [5] [6] [7] [8] # # (1) 1 0 0 0 0 0 0 0 # # [2] 2 0 0 0 0 0 0 0 # # [3] 3 0 0 0 0 0 0 0 # # [4] 4 0 0 0 0 0 0 0 # # [5] 5 0 0 0 0 0 0 0
=“myhdf5file h5write(6:10,文件。h5", name="foo/S", index=list(1,2:6)) h5read("myhdf5file. "h5”、“foo / S”)
# # [1] [2] [3] [4] [5] [6] [7] [8] # # [1] 1 6 7 8 9 10 0 0 # # [2] 2 0 0 0 0 0 0 0 # # [3] 3 0 0 0 0 0 0 0 # # [4] 4 0 0 0 0 0 0 0 # # [5] 5 0 0 0 0 0 0 0
h5write(矩阵(11:40,nr = 5,数控= 6),文件= " myhdf5file。h5", name="foo/S", index=list(1:5,3:8)) h5read("myhdf5file. "h5”、“foo / S”)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] ## [1,] 16 11 16 21 26 31 36 ## [2,] 20 12 17 22 27 32 37 ## [3,] 30 13 18 23 28 33 38 ## [4,] 40 14 19 24 29 34 39 ## [5,] 5 0 15 20 25 30 35 40
h5write(矩阵(141:144、nr = 2、数控= 2),文件= " myhdf5file。h5", name="foo/S", index=list(3:4,1:2)) h5read("myhdf5file. "h5”、“foo / S”)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] ## [1,] 16 11 16 21 26 31 36 ## [2,] 20 12 17 22 27 32 37 ## [3,] 141 143 13 18 23 28 33 38 ## [4,] 142 144 14 19 24 29 34 39 ## [5,] 5 0 15 20 25 30 35 40
h5write(矩阵(151:154、nr = 2、数控= 2),文件= " myhdf5file。h5 " name = " foo / S”,指数=列表(2:3,c(3、6)))h5read(“myhdf5file。h5”、“foo / S”)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] ## [1,] 16 11 16 21 26 31 36 ## [2,] 20 151 17 22 153 32 37 ## [3,] 141 143 152 18 23 154 33 38 ## [4,] 142 144 14 19 24 29 34 39 ## [5,] 5 0 15 20 25 30 35 40
h5read(“myhdf5file。h5", "foo/S", index=list(2:3,2:3))
## [,1] [,2] ## [1,] 0 151 ## [2,] 143 152
h5read(“myhdf5file。h5", "foo/S", index=list(2:3,c(2,4))))
## [,1] [,2] ## [1,] 0 17 ## [2,] 143
h5read(“myhdf5file。h5", "foo/S", index=list(2:3,c(1,2,4,5))))
# # [1] [2] [3] [4] # # [1] 2 0 17 22 # # 141 143 18 23 [2]

HDF5超实验室是由一些参数定义的开始,。这些论点是无效的,如果论点指数都是确定的。

h5createDataset(“myhdf5file。h5", "foo/H", c(5,8),存储。Mode =" integer", chunk=c(5,1), level=7) h5write(matrix(1:5,nr=5,nc=1), file="myhdf5file. "h5", name="foo/H", start=c(1,1)) h5read("myhdf5file. "h5”、“foo / H”)
# # [1] [2] [3] [4] [5] [6] [7] [8] # # (1) 1 0 0 0 0 0 0 0 # # [2] 2 0 0 0 0 0 0 0 # # [3] 3 0 0 0 0 0 0 0 # # [4] 4 0 0 0 0 0 0 0 # # [5] 5 0 0 0 0 0 0 0
=“myhdf5file h5write(6:10,文件。h5 " name = " foo / H”,开始= c(1、2),数= c(1、5))h5read(“myhdf5file。h5”、“foo / H”)
# # [1] [2] [3] [4] [5] [6] [7] [8] # # [1] 1 6 7 8 9 10 0 0 # # [2] 2 0 0 0 0 0 0 0 # # [3] 3 0 0 0 0 0 0 0 # # [4] 4 0 0 0 0 0 0 0 # # [5] 5 0 0 0 0 0 0 0
h5write(矩阵(11:40,nr = 5,数控= 6),文件= " myhdf5file。h5", name="foo/H", start=c(1,3)) h5read("myhdf5file. "h5”、“foo / H”)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] ## [1,] 16 11 16 21 26 31 36 ## [2,] 20 12 17 22 27 32 37 ## [3,] 30 13 18 23 28 33 38 ## [4,] 40 14 19 24 29 34 39 ## [5,] 5 0 15 20 25 30 35 40
h5write(矩阵(141:144、nr = 2、数控= 2),文件= " myhdf5file。h5", name="foo/H", start=c(3,1)) h5read("myhdf5file. "h5”、“foo / H”)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] ## [1,] 16 11 16 21 26 31 36 ## [2,] 20 12 17 22 27 32 37 ## [3,] 141 143 13 18 23 28 33 38 ## [4,] 142 144 14 19 24 29 34 39 ## [5,] 5 0 15 20 25 30 35 40
h5write(矩阵(151:154、nr = 2、数控= 2),文件= " myhdf5file。h5", name="foo/H", start=c(2,3), stride=c(1,3)) h5read("myhdf5file. "h5”、“foo / H”)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] ## [1,] 16 11 16 21 26 31 36 ## [2,] 20 151 17 22 153 32 37 ## [3,] 141 143 152 18 23 154 33 38 ## [4,] 142 144 14 19 24 29 34 39 ## [5,] 5 0 15 20 25 30 35 40
h5read(“myhdf5file。h5", "foo/H", start=c(2,2), count=c(2,2))
## [,1] [,2] ## [1,] 0 151 ## [2,] 143 152
h5read(“myhdf5file。h5”、“foo / H”,开始= c(2, 2),跨步= c(1、2),数= c (2, 2))
## [,1] [,2] ## [1,] 0 17 ## [2,] 143
h5read(“myhdf5file。h5”、“foo / H”,开始= c(2, 1),跨步= c(1,3),数= c(2, 2),块= c(1、2)
# # [1] [2] [3] [4] # # [1] 2 0 17 22 # # 141 143 18 23 [2]

2.4将多个对象保存到HDF5文件(h5save)

使用该函数可以将许多对象写入HDF5文件的顶层组h5save ()(类似于基R函数save ()).

A = 1:7;B = 1:18;D = seq(0,1,by=0.1) h5save(A, B, D, file="newfile2.h5") h5dump("newfile2.h5")
## $ [1] 12 3 4 5 6 7 ## ## $ b# # [1] 12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ## ## $ d# # [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

2.5列出HDF5文件的内容

这个函数h5ls ()提供了一些查看HDF5文件内容的方法。

h5ls(“myhdf5file.h5”)
## group name otype dclass dim ## 0 / baa H5I_GROUP ## 1 / df h5i_group# # 3 /foo A H5I_DATASET INTEGER 5 * 2 ## 4 /foo B H5I_DATASET FLOAT 5 * 2 * 2 ## 5 /foo H H5I_DATASET INTEGER 5 * 8 ## 6 /foo S H5I_DATASET INTEGER 5 * 8 ## 7 /foo foobaa h5i_group# # 8 /foo/foobaa C H5I_DATASET STRING 2 * 5
h5ls(“myhdf5file。h5”,所有= TRUE)
# #组名ltype cset otype num_attrs dclass # # 0 / baa H5L_TYPE_HARD 0 H5I_GROUP 0 # # 1 / df H5L_TYPE_HARD H5I_DATASET 0复合# # 2 / foo H5L_TYPE_HARD H5I_GROUP 0 # # 3 / foo H5L_TYPE_HARD 0 H5I_DATASET 1整数0 H5I_DATASET 1 # # 4 / foo B H5L_TYPE_HARD浮动# # 5 / foo H H5L_TYPE_HARD 0 H5I_DATASET 1整数# # 6 / foo S H5L_TYPE_HARD 0 H5I_DATASET 1整数# # 7 / foo foobaa H5L_TYPE_HARD H5I_GROUP 0 # # 8 C / foo / foobaa H5L_TYPE_HARD 0 H5I_DATASET 1字符串# # dtype药栓昏暗的排名H5T_STD_I32LE SIMPLE 2 5 x 2 x 2 5 x 2 x 2 ## 5 H5T_STD_I32LE SIMPLE 2 5 x 8 5 x 8 ## 6 H5T_STD_I32LE SIMPLE 2 5 x 8 5 x 8 ## 7 0 ## 8 H5T_STRING SIMPLE 2 2 x 5 2 x 5 x 5 x 5
h5ls(“myhdf5file。h5”,递归= 2)
## group name otype dclass dim ## 0 / baa h5i_group# # 1 / df h5i_group# # 3 /foo A H5I_DATASET INTEGER 5 * 2 ## 4 /foo B H5I_DATASET FLOAT 5 * 2 * 2 ## 5 /foo H H5I_DATASET INTEGER 5 * 8 ## 6 /foo S H5I_DATASET INTEGER 5 * 8 ## 7 /foo foobaa H5I_GROUP

2.6转储HDF5文件的内容

这个函数h5dump ()和函数相似吗h5ls ()。如果与参数一起使用负荷= FALSE时,产生的结果与h5ls (),但是将组结构解析为列表的层次结构。如果默认参数负荷= TRUE读取HDF5文件中的所有数据集。

h5dump(“myhdf5file.h5负载= FALSE)
# # $ baa零# # # # # # $ df # #组名otype dclass昏暗的# # 1 / df H5I_DATASET化合物5 # # # # $ foo # # $ foo $ # #集团名称otype dclass昏暗的# # 1 / H5I_DATASET整数5 x 2 # # # # # # $ foo $ B组名otype dclass昏暗的# # 1 / B H5I_DATASET浮5 x 2 x 2 # # # # # # $ foo $ H组名otype dclass昏暗的# # 1 / H H5I_DATASET整数5 x 8 # # # # $ foo $ S # #组名otype dclass昏暗的# # 1 / S H5I_DATASET整数5 x 8 # # # # $ foo $ foobaa # # # # $ foo $ foobaa $ C组名otype dclass昏暗的# # 1 / CH5I_DATASET STRING 2 * 5
D <- h5dump("myhdf5file.h5")

2.7使用外部软件读取HDF5文件

HDF5文件的内容可以用命令行工具检查h5dump(在安装了HDF5工具包的类linux系统上可用)或图形用户界面HDFViewhttp://www.hdfgroup.org/hdf-java-html/hdfview/),适用于所有主要平台。

系统2(“h5dump”、“myhdf5file.h5”)

请注意,当用c程序打开它时,数组显示为转置矩阵(h5dumpHDFView).这是因为在C语言中变化最快的维度是最后一个维度,而在R语言中是第一个维度(就像在Fortran语言中一样)。

2.8从HDF5文件中删除内容

除了向HDF5文件添加内容外,还可以使用该函数删除条目h5delete ()。为了演示它的用法,我们将首先列出文件的内容,并以字节为单位检查文件的大小。

h5ls(“myhdf5file。h5”,递归= 2)
## group name otype dclass dim ## 0 / baa h5i_group# # 1 / df h5i_group# # 3 /foo A H5I_DATASET INTEGER 5 * 2 ## 4 /foo B H5I_DATASET FLOAT 5 * 2 * 2 ## 5 /foo H H5I_DATASET INTEGER 5 * 8 ## 6 /foo S H5I_DATASET INTEGER 5 * 8 ## 7 /foo foobaa H5I_GROUP
file.size(“myhdf5file.h5”)
## [1] 26181

然后我们使用h5delete ()删除df通过提供文件名和数据集的名称,例如:

H5delete (file = "myhdf5file. "H5 ", name = "df") h5ls("myhdf5file. "h5”,递归= 2)
## group name otype dclass dim ## 0 / baa H5I_GROUP ## 1 /foo H5I_GROUP ## 2 /foo A H5I_DATASET INTEGER 5 * 2 ## 3 /foo B H5I_DATASET FLOAT 5 * 2 * 2 ## 4 /foo H H5I_DATASET INTEGER 5 * 8 ## 5 /foo S H5I_DATASET INTEGER 5 * 8 ## 6 /foo foobaa H5I_GROUP

我们可以看到df条目现在已经从列表中消失了。在大多数情况下,如果你在文件中有一个遗产,h5delete ()也将删除已删除条目的子条目。在这个例子中,我们删除喷火并且它下面的数据集也被删除。还要注意文件的大小减小了。

H5delete (file = "myhdf5file. "H5 ", name = "foo") h5ls("myhdf5file. "h5”,递归= 2)
## dclass dim ## 0 / baa H5I_GROUP
file.size(“myhdf5file.h5”)
## [1] 26121

注意:h5delete ()不显式遍历树以删除子节点。它只删除命名条目,然后HDF5将删除子节点(如果它们现在是孤立的)。因此,如果你有一个更复杂的结构,一个子节点有多个父节点,并且只删除其中一个,它就不会删除子节点。

3.64位的整数

R不支持64位整数的本机数据类型。所有的整数R是32位整数。当从hdf5文件读取64位整数时,您可能会遇到麻烦。rhdf5能够处理64位整数,但您仍然应该注意。

例如,我们创建一个包含64位整数的HDF5文件。

x = h5createFile("newfile3.h5") D = array(1L:30L,dim=c(3,5,2)) D = h5createDataset(file="newfile3. h5")h5", dataset="D64", dims=c(3,5,2),H5type="H5T_NATIVE_INT64") h5write(D,file="newfile3.h5",name="D64")

读取64位整数有三种不同的方法RH5Dread ()而且h5read ()有论点bit64conversion指定转换方法。

通过设置bit64conversion = ' int ',强制转换为32位整数,有数据丢失的风险,但保证数字表示为本机整数。

D64a = h5read(file="newfile3.h5",name="D64",bit64conversion="int"
1 # #, # # # # [1] [2] [3] [4] [5] # # [1] 1 4 7 10 13 # # [2] 2 5 8 11 14 # # [3] 3 6 9 12 15  ## ## , , 2 # # # # [1] [2] [3] [4] [5] # # [1] 16 19 22 25 28 # # 17 [2] 20 23 26 29 # # 18 21 24 [3] 27 30
storage.mode (D64a)
##[1]“整数”

bit64conversion =“双”将64位整数强制为浮点数。double可以表示最多54位的整数,但它们不再表示为整数值。对于较大的数字,仍然有数据丢失。

D64b = h5read(file="newfile3.h5",name="D64",bit64conversion="double"
1 # #, # # # # [1] [2] [3] [4] [5] # # [1] 1 4 7 10 13 # # [2] 2 5 8 11 14 # # [3] 3 6 9 12 15  ## ## , , 2 # # # # [1] [2] [3] [4] [5] # # [1] 16 19 22 25 28 # # 17 [2] 20 23 26 29 # # 18 21 24 [3] 27 30
storage.mode (D64b)
##[1]“double”

bit64conversion = ' bit64 '是推荐的强制方式。它将64位整数表示为类的对象integer64在包中定义bit64。确保您已经安装bit64的数据类型Integer64 *不是base的一部分R,但定义在一个外部包中。这在处理数据时可能会产生意想不到的行为。*选择此选项时,包装bit64将被装载。

D64c = h5read(file="newfile3.h5",name="D64",bit64conversion="bit64"
1 # # integer64 # #, # # # # [1] [2] [3] [4] [5] # # [1] 1 4 7 10 13 # # [2] 2 5 8 11 14 # # [3] 3 6 9 12 15  ## ## , , 2 # # # # [1] [2] [3] [4] [5] # # [1] 16 19 22 25 28 # # 17 [2] 20 23 26 29 # # 18 21 24 [3] 27 30
类(D64c)
##[1]“integer64”

4HDF5的低级功能

4.1创建HDF5文件和组层次结构

创建文件。

library(rhdf5) h5file = H5Fcreate("newfile.h5") h5file .h5
## HDF5文件##名称/ ##文件名## ##[1]名称otype dclass dim ## <0行>(或0长度行。names)

还有一个群体层次结构

h5group1 <- H5Gcreate(h5file, "foo") h5group2 <- H5Gcreate(h5file, "baa") h5group3 <- H5Gcreate(h5group1, "foobaa") h5group3 . hh5gcreate (h5group1, "foobaa") h5group3 . hh5gcreate (h5group1, "foo"
## HDF5 GROUP ## name /foo/foobaa ## filename ## ## [1] name otype dclass dim ## <0 rows>(或0-length row.names)

4.2写入HDF5文件

创建4个不同的简单和标量数据空间。数据空间为数据集设置维度。

d = c(5,7) h5space1 = H5Screate_simple(d,d) h5space2 = H5Screate_simple(d,NULL) h5space3 = H5Scopy(h5space1) h5space4 = H5Screate("H5S_SCALAR") h5space1
HDF5数据空间大小为5 * 7,最大大小为5 * 7
H5Sis_simple (h5space1)
##[1]真

创建两个数据集,一个是整数,一个是浮点数。

h5dataset1 = H5Dcreate(h5file, "dataset1", "H5T_IEEE_F32LE", h5space1) h5dataset2 = H5Dcreate(h5group2, "dataset2", "H5T_STD_I32LE", h5space1) h5dataset1
## HDF5数据集##名称/dataset1 ##文件名##类型H5T_IEEE_F32LE ## rank 2 ##大小5 * 7 ##最大大小5 * 7

现在让我们向数据集写入数据。

A = seq(0.1,3.5,length.out=5*7) H5Dwrite(h5dataset1, A) B = 1:35 H5Dwrite(h5dataset2, B)

为了释放资源并确保数据被写入磁盘,我们必须关闭数据集、数据空间和文件。有不同的功能来关闭数据集、数据空间、组和文件。

H5Dclose(h5dataset1) H5Dclose(h5dataset2) H5Fclose(h5space1) h5close (h5space2) h5close (h5space3) h5close (h5space4) H5Gclose(h5group1) H5Gclose(h5group2) H5Gclose(h5group3) H5Fclose(h5file)

5会话信息

sessionInfo ()
## R version 4.2.0 Patched (2022-06-02 r82447) ##平台:x86_64-pc-linux-gnu(64位)##运行在:Ubuntu 20.04.4 LTS ## ##矩阵产品:默认## BLAS: /home/biocbuild/bbs-3.16-bioc/R/lib/libRblas。/home/biocbuild/bbs-3.16-bioc/R/lib/libRlapack。所以## ## 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 ## ##附加的基本包:## [1]stats graphics grDevices utils datasets methods基础## ##其他附加包:## [1]ggplot2_3.3.6 dplyr_1.0.9 rhdf5_2.41.1 BiocStyle_2.25.0 ## ##通过命名空间加载(且未附加):##[4]编译er_4.2.0 pillar_1.7.0 BiocManager_1.30.18 ## [7] jquerylib_0.1.4 rhdf5filters_1.9.0 tools_4.2.0 ## [10] bit_4.0.4 digest_0.6.29 gtable_0.3.0 ## [13] jsonlite_1.8.0 evaluate_0.15 lifecycle_1.0.1 ## [19] tibble_3.1.7 pkgconfig_2.0.3 rlang_1.0.2 ## [19] cli_3.3.0 DBI_1.1.3 magick_2.7.3 ## [22] microbenchmark_1.4.9 yaml_2.3.5 xfun_0.31 ## [25] fastmap_1.1.0 withr_2.5.0 string_1 .4.0 ## [28] knitr_1.39 generics_0.1.2 vctrs_0.4.1 ## [31][46] htmltools_0.5.2 ellipsis_0.3.2 assertthat_0.2.1 ## [49] colorspace_2.0-3 labeling_0.4.2 utf8_1.2.2 ## [52] stringi_1.7.6 munsell_0.5.0 crayon_1.5.1