如何处理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
相比,它具有以下特点:
- S4对象模型直接与HDF5对象(如文件,组,数据集和属性)进行交互。
- 更简单的语法,实现了像
readdata <- dataset[1:3, 1:3] dataset[1:3, 1:3] <- matrix(1:9, nrow = 3)
- 所有数据types都支持NA值
- 代码覆盖率为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
提供了一个简单的界面,将使用旧的hdf5
和ncdf
软件包的代码迁移到一个ncdf4
软件包,使得我们的代码更lessbug,更易于编写(我的一些试验和解决方法在我以前的答案中有logging)。