web-dev-qa-db-ja.com

Rでhdf5ファイルを処理するには?

hdf5形式のファイルがあります。私はそれが行列であることを知っていますが、それを研究できるようにRでその行列を読みたいです。これを支援することになっているh5rパッケージがあることはわかりましたが、読みやすい/理解しやすいチュートリアルはありません。このようなチュートリアルはオンラインで入手できますか。具体的には、このパッケージでhdf5オブジェクトをどのように読み取り、実際にマトリックスを抽出するのですか?

更新

CRANの一部ではなく、BioConductoRの一部であるパッケージrhdf5を見つけました。インターフェイスはドキュメントを比較的理解しやすく、サンプルコードは非常に明確です。問題なく使用できました。私の問題は、入力ファイルのようです。読みたかったマトリックスは、実際にhdf5ファイルにpython pickleとして保存されていました。そのため、Rを介して開いてアクセスしようとするたびに、segmentation faultを取得しました。 python内からtsvファイルとして行列を保存する方法を考え出しましたが、この問題は解決しました。

48
Sam

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)

(多次元配列 転置されているように見える )。また、Rのリストに名前が付けられるグループを読み取ることができます。

41
Mike T

また、h5を使用することもできます。これは、最近CRANで公開したパッケージです。 _rhdf5_と比較すると、次の機能があります。

  1. ファイル、グループ、データセット、属性などのHDF5オブジェクトと直接やり取りするS4オブジェクトモデル。
  2. シンプルな構文、readdata <- dataset[1:3, 1:3] dataset[1:3, 1:3] <- matrix(1:9, nrow = 3)などのコマンドをサポートするデータセットにRのようなサブセット演算子を実装
  3. すべてのデータ型でサポートされるNA値
  4. 80%以上のコードカバレッジを持つ200以上のテストケース。

マトリックスを保存するには、次を使用できます。

_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も参照してください

20
user625626

rgdalパッケージを使用してHDF5ファイルを読み取りました。おそらく、バイナリバージョンのrgdalhdf5をサポートしないことに注意する必要があります。その場合、ソースからgdalをビルドする前に、HDF5サポートを使用してソースからrgdalをビルドする必要があります。

または、ファイルをhdf5からnetcdfに変換してみてください。 netcdfに入ったら、優れたncdfパッケージを使用してデータにアクセスできます。 cdoツール で変換できると思います。

5
Paul Hiemstra

ncdf4 netCDF-4へのインターフェイスであるパッケージは、hdf5ファイルの読み取りにも使用できます(netCDF-4はnetCDF-3と互換性がありますが、ストレージレイヤーとしてhdf5を使用します)。

開発者の言葉で:

NetCDF-4は、netCDF-3とHDF5のデータモデルを組み合わせて、それぞれの望ましい特性を取り入れながら、それぞれの長所を活用しています

NetCDF-4形式は、HDF5の拡張バージョンをストレージレイヤーとして使用することにより、netCDF-3データモデルを実装および拡張します。

実際には、 ncdf4はシンプルなインターフェースを提供し、古いhdf5およびncdfパッケージを単一のncdf4パッケージにより コード バグが少なくなり、記述しやすくなりました(私の試用および回避策の一部は 以前の回答 に記載されています)。

4
David LeBauer