2013-04-12 220 views
39

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

UPDATE

我发现了一个包rhdf5这是不CRAN的一部分,但是Bioconductor的的一部分。界面相对容易理解文档,示例代码非常清晰。我可以毫无问题地使用它。我的问题似乎是输入文件。我想要读取的矩阵实际上作为python pickle存储在hdf5文件中。所以每次我试图打开它并通过R访问它时,我得到了segmentation fault。我弄清楚如何将python中的矩阵保存为tsv文件,现在解决了该问题。

回答

5

我用rgdal包读取HDF5文件。您需要注意,可能rgdal的二进制版本不支持hdf5。在这种情况下,您需要从源代码构建gdal,并在构建来自源代码的rgdal之前支持HDF5。

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

+0

你能告诉我一些模板代码关于如何处理这个? – Sam

+1

你现在的问题有点宽泛。如果您有更具体的问题,包括代码示例,请随时提出更多问题。 –

4

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

在显影剂的话:

的NetCDF-4结合的netCDF-3和HDF5数据模型,获取每个的所希望的特性,同时利用各自的优势

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

在实践中,ncdf4提供了一个简单的界面,并使用较老hdf5ncdf封装到一个ncdf4包迁移代码取得了our code bug更少,更容易编写(我的一些试验和解决方法的my previous answer都记录)。

33

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") 

而且inspect the structure

str(mydata) 

(请注意,多维数组may appear transposed)。您也可以阅读R组,这些组将列入R.列表。

+0

非常好的包装。我正考虑首先使用CRAN的'h5r'软件包,但似乎没有记录。如果你不介意取决于Bioconductor,那么'rhdf5'绝对是你的选择。 –

+4

在读入h5文件之前,使用函数h5ls(“path/to/file.h5”)会很有帮助。 –

+1

这是一个好的开始。这里是一个体面的教程,详细介绍了rdhf5的使用http://www.r-bloggers.com/working-with-hdf-files-in-r-example-pathfinder-sst-data/ – mmann1123

14

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

  1. S4对象模型直接交互与HDF5对象,如文件,组,数据集和属性。
  2. 简单的语法,实现R-像子集操作符的数据集支持像 readdata <- dataset[1:3, 1:3] dataset[1:3, 1:3] <- matrix(1:9, nrow = 3)
  3. 支持NA命令对所有数据类型
  4. 200+测试用例用80%+的代码覆盖值。

要保存矩阵可以使用:

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) 

...并宣读了整个矩阵回R:

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

又见H5上

+1

您可以概述' h5'和'Rhdf5'? – krlmlr

+1

如何从化合物表加载表? LAT < - readDataSet(数据集[ “表”]) 错误的eval(代用品(表达式),ENVIR,enclos):化合物数据类型的 读尚不支持。 – BigChief

+1

是否'h5'包支持的数据帧? – discipulus