Подтвердить что ты не робот

Как работать с файлами hdf5 в R?

У меня есть файл в формате hdf5. Я знаю, что он должен быть матрицей, но я хочу прочитать эту матрицу в R, чтобы я мог ее изучить. Я вижу, что есть пакет h5r, который должен помочь с этим, но я не вижу никакого простого для чтения/понимания учебника. Это учебник доступен в Интернете. В частности, как вы читаете объект hdf5 с этим пакетом и как на самом деле извлекаете матрицу?

ОБНОВЛЕНИЕ

Я обнаружил пакет rhdf5, который не является частью CRAN, но является частью BioConductoR. Интерфейс относительно прост для понимания документации и кода примера. Я мог бы использовать его без проблем. Моя проблема - это входной файл. Матрица, которую я хотел прочитать, фактически хранилась в файле hdf5 как python pickle. Поэтому каждый раз, когда я пытался открыть его и доступ к нему через R, я получил segmentation fault. Я выяснил, как сохранить матрицу из python в качестве файла tsv, и теперь эта проблема решена.

4b9b3361

Ответ 1

Пакет 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.

Ответ 2

Вы также можете использовать h5, пакет, который я недавно опубликовал на CRAN. По сравнению с rhdf5 он имеет следующие функции:

  • Объектная модель S4 напрямую взаимодействует с объектами HDF5, такими как файлы, группы, наборы данных и атрибуты.
  • Упрощенный синтаксис, реализованные R-подобные подмножества операторов для наборов данных, поддерживающих команды типа readdata <- dataset[1:3, 1:3] dataset[1:3, 1:3] <- matrix(1:9, nrow = 3)
  • Поддерживаемые значения NA для всех типов данных
  • 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 на

Ответ 3

Я использовал пакет rgdal для чтения файлов HDF5. Вам нужно позаботиться о том, что, возможно, двоичная версия rgdal не поддерживает hdf5. В этом случае вам нужно построить gdal из источника с поддержкой HDF5 до создания rgdal из исходного кода.

В качестве альтернативы попробуйте преобразовать файлы с hdf5 в netcdf. Как только они появятся в netcdf, вы можете использовать отличный пакет ncdf для доступа к данным. Преобразование, я думаю, может быть сделано с помощью cdo tool.

Ответ 4

Пакет ncdf4, интерфейс для netCDF-4, также может использоваться для чтения файлов hdf5 (совместим с netCDF-4 с netCDF-3, но он использует hdf5 в качестве уровня хранения).

Произношение:

NetCDF-4 объединяет модели данных netCDF-3 и HDF5, используя желаемые характеристики каждого из них, используя при этом свои преимущества.

Формат netCDF-4 реализует и расширяет модель данных netCDF-3, используя расширенную версию HDF5 в качестве уровня хранения.

На практике ncdf4 предоставляет простой интерфейс, а перенос кода из старых пакетов hdf5 и ncdf в один пакет ncdf4 сделал наш код, менее багги и легче писать (некоторые из моих проб и обходных решений описаны в моем предыдущем ответе).