是否可以使用R中的rhdf5更新hdf5文件中的数据集维度?

时间:2014-09-09 20:14:24

标签: r hdf5 bioconductor

我正在尝试更新hdf5文件中1组中的7个数据集,但更新的数据集的大小尺寸与原始尺寸不同(但是相同的维度,即1D,2D和3D)。有没有办法改变维度属性以更新数据集?或者,我可以删除以前的组,然后在其中创建一个新组吗?我宁愿不重建整个h5文件(创建文件,创建组,创建数据集),因为它相当复杂。

我正在使用R。

中的Bioconductor rhdf5

示例数据:

# load package from bioconductor
source("http://bioconductor.org/biocLite.R")
biocLite("rhdf5")
library(rhdf5)

# create new h5 file and populate
created = h5createFile('example.h5')
created = h5createGroup('example.h5','foo')
h5write(matrix(1:10, nr=5, nc=2), 'example.h5', 'foo/A')

# updating dataset with data of same dimension is successful
h5write(matrix(11:20, nr= 5, nc = 2), 'example.h5', 'foo/A') 

# updating dataset with data of different dimension fails
h5write(matrix(1:12, nr= 6, nc = 2), 'example.h5', 'foo/A')

注意:我以前读过hdf5文件中的数据,但这是我第一次将数据写回文件中,所以这可能是一种天真的期望。

2 个答案:

答案 0 :(得分:1)

不幸的是,HDF5数据集的最大大小在创建时是固定的,之后无法增加。您将不得不重新创建至少要扩展的数据集。

HDF5确实允许你删除"一个数据集,但这只涉及取消链接,即它变得无法访问,但空间不被回收。但是,rhdf5似乎没有为此提供接口。熟悉rhdf5的人可能会帮助你。

您可以使用

rhdf5中设置最大尺寸
h5createDataset('example.h5', 'foo/A', c(10), maxdims=c(12))

来自rhdf5 reference manual(PDF)。如果你想要一个无限制的maxdims,它需要更多一些:首先你必须使用HDF5常量创建一个数据空间并使用它来创建你的数据集。

答案 1 :(得分:0)

请注意,如果要将数据集更改为较小数据集,则可以这样做。您可以使用2.11.4版以上的函数“ h5set_extent”。see documentation