2013-04-12 102 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