我有一个hdf5
格式的文件。我知道它应该是一个矩阵,但我想在R
中读取该矩阵,以便我可以研究它。我看到有一个h5r
包可以帮助解决这个问题,但是我没有看到任何简单的阅读/理解教程。这样的教程是否可在线获取。具体来说,你如何阅读这个包的hdf5
对象,以及如何实际提取矩阵?
更新
我发现了一个包rhdf5
,它不是CRAN的一部分,但却是BioConductoR的一部分。界面相对容易理解文档和示例代码非常清楚。我可以毫无问题地使用它。我的问题似乎是输入文件。我想要阅读的矩阵实际上作为hdf5
存储在python pickle
文件中。因此,每当我尝试打开并通过R
访问它时,我都会获得segmentation fault
。我确实想出如何将python
内的矩阵保存为tsv
文件,现在该问题已解决。
答案 0 :(得分:39)
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)
(注意多维数组may appear transposed)。您还可以阅读组,这些组将在R。
中命名为列表答案 1 :(得分:19)
你也可以使用我最近在CRAN上发布的 h5 这个包。
与rhdf5
相比,它具有以下功能:
readdata <- dataset[1:3, 1:3]
dataset[1:3, 1:3] <- matrix(1:9, nrow = 3)
要保存矩阵,您可以使用:
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答案 2 :(得分:5)
我使用rgdal
包来读取HDF5文件。您确实需要注意rgdal
的二进制版本可能不支持hdf5
。在这种情况下,您需要从源代码构建gdal
并使用HDF5支持,然后才能从源代码构建rgdal
。
或者,尝试将文件从hdf5
转换为netcdf
。一旦它们在netcdf中,您就可以使用优秀的ncdf
包来访问数据。我认为可以使用cdo
tool进行转换。
答案 3 :(得分:4)
ncdf4
包,netCDF-4的接口,也可用于读取hdf5文件(netCDF-4与netCDF-3兼容,但它使用hdf5作为存储层)。
用开发人员的话来说:
NetCDF-4结合了netCDF-3和HDF5数据模型,采用了每种数据的理想特性,同时利用了它们各自的优势
netCDF-4格式通过使用增强版HDF5作为存储层来实现和扩展netCDF-3数据模型。
在实践中,ncdf4
提供了一个简单的界面,并且将使用较旧的hdf5
和ncdf
包的代码迁移到单个ncdf4
包已our code更少的错误和更容易编写(我的一些试验和解决方法记录在my previous answer)。