如何处理R中的hdf5文件?

我有一个hdf5格式的文件。 我知道它应该是一个matrix,但我想在R读取这个matrix,以便我可以研究它。 我看到有一个h5r软件包可以帮助解决这个问题,但是我没有看到任何简单的阅读/理解教程。 在线提供这样的教程吗? 具体来说,你如何读这个包的hdf5对象,以及如何实际提取matrix?

UPDATE

我发现一个包装不是CRAN的一部分但是是BioConductoR的一部分的rhdf5。 界面相对比较容易理解文档,示例代码非常清晰。 我可以使用它没有问题。 我的问题似乎是input文件。 我想读取的matrix实际上是作为python pickle存储在hdf5文件中的。 所以每次我试图打开它并通过R访问它,我有一个segmentation fault 。 我弄清楚如何从python保存matrix作为tsv文件,现在解决了这个问题。

rhdf5包运行得非常好,虽然它不在CRAN中。 从Bioconductor安装它

 source("http://bioconductor.org/biocLite.R") biocLite("rhdf5") 

并使用它:

 library(rhdf5) 

列出文件中的对象以查找要读取的数据组:

 h5ls("path/to/file.h5") 

阅读HDF5数据:

 mydata <- h5read("path/to/file.h5", "/mygroup/mydata") 

并检查结构 :

 str(mydata) 

(请注意,multidimensional array可能会出现换位 )。 你也可以阅读组,这将在R.

你也可以使用h5 ,这是我最近在CRAN上发布的一个包。 与rhdf5相比,它具有以下特点:

  1. S4对象模型直接与HDF5对象(如文件,组,数据集和属性)进行交互。
  2. 更简单的语法,实现了像readdata <- dataset[1:3, 1:3] dataset[1:3, 1:3] <- matrix(1:9, nrow = 3)
  3. 所有数据types都支持NA值
  4. 代码覆盖率为80%以上的200个testing用例。

要保存一个matrix,你可以使用:

 library(h5) testmat <- matrix(rnorm(120), ncol = 3) # Create HDF5 File file <- h5file("test.h5") # Save matrix to file in group 'testgroup' and datasetname 'testmat' file["testgroup", "testmat"] <- testmat # Close file h5close(file) 

…并将整个matrix读回R:

 file <- h5file("test.h5") testmat_in <- file["testgroup", "testmat"][] h5close(file) 

另见h5

  • CRAN: http : //cran.r-project.org/web/packages/h5/index.html
  • Github: https : //github.com/mannau/h5

我使用rgdal包来读取HDF5文件。 你需要小心,可能二进制版本的rgdal不支持hdf5 。 在这种情况下,您需要从源代码构buildgdal ,然后从源代码构buildrgdal

或者,尝试将文件从hdf5转换为netcdf 。 一旦他们在netcdf,你可以使用优秀的ncdf包来访问数据。 我认为可以用cdo工具完成转换。

netCDF-4的接口ncdf4也可用于读取hdf5文件(netCDF-4与netCDF-3兼容,但使用hdf5作为存储层)。

用开发者的话说:

  • HDF组织说:

NetCDF-4结合了netCDF-3和HDF5数据模型,充分利用各自的特点,

  • Unidata说:

netCDF-4格式通过使用HDF5的增强版本作为存储层来实现和扩展netCDF-3数据模型。

在实践中, ncdf4提供了一个简单的界面,将使用旧的hdf5ncdf软件包的代码迁移到一个ncdf4软件包,使得我们的代码更lessbug,更易于编写(我的一些试验和解决方法在我以前的答案中有logging)。