我有一个hdf5
的文件。我知道它应该是一个矩阵,但我想读取R
中的矩阵,以便我可以研究它。我看到有一个h5r
包应该可以帮助解决这个问题,但我没有看到任何简单的阅读/理解教程。这样的教程在网上有吗。具体来说,如何用这个包读取hdf5
对象,以及如何实际提取矩阵?
更新
我发现了一个软件包rhdf5
,它不是CRAN的一部分,而是BioConductoR的一部分。界面相对容易理解,文档和示例代码相当清晰。我可以使用它没有问题。我的问题似乎是输入文件。我想要读取的矩阵实际上存储在hdf5
文件中,作为python pickle
。所以每次我试图打开它并通过R
访问它时,我都会得到一个segmentation fault
。我确实弄清楚了如何将python
中的矩阵保存为tsv
文件,现在这个问题解决了。
5条答案
按热度按时间pb3skfrl1#
rhdf5
包工作得非常好,尽管它不在CRAN中。从Bioconductor安装并使用它:
列出文件中的对象以查找要读取的数据组:
读取HDF5数据:
inspect the structure:
(Note多维数组may appear transposed)。你也可以读取组,它们在R中被命名为列表。
eqqqjvef2#
你也可以使用h5,这是我最近在CRAN上发布的一个包。与
rhdf5
相比,它具有以下特点:1.语法更简单,为支持
readdata <- dataset[1:3, 1:3] dataset[1:3, 1:3] <- matrix(1:9, nrow = 3)
等命令的数据集实现了类似R的子集运算符1.所有数据类型支持的NA值
要保存矩阵,您可以用途:
...并将整个矩阵读回R:
另见H5
ccrfmcuu3#
我使用
rgdal
包读取HDF5文件。您需要注意的是,rgdal
的二进制版本可能不支持hdf5
。在这种情况下,您需要在从源代码构建rgdal
之前从源代码构建gdal
并支持HDF5。或者,尝试将文件从
hdf5
转换为netcdf
。一旦它们位于netcdf中,您就可以使用优秀的ncdf
包来访问数据。我认为转换可以用cdo
tool完成。pgpifvop4#
ncdf4
包是netCDF-4的接口,也可以用来读取hdf 5文件(netCDF-4与netCDF-3兼容,但它使用hdf 5作为存储层)。用开发者的话说:
NetCDF-4结合了netCDF-3和HDF 5数据模型,采用了各自的理想特性,同时利用了它们各自的优势
netCDF-4格式通过使用HDF 5的增强版本作为存储层来实现和扩展netCDF-3数据模型。
在实践中,
ncdf4
提供了一个简单的接口,并且将使用旧的hdf5
和ncdf
包的代码迁移到单个ncdf4
包中,使得our code的错误更少,更容易编写(我的一些试验和解决方法在my previous answer中有文档记录)。4bbkushb5#
解决我的问题: