Поиск всех атрибутов файла HDF5 в R - не отображается так же, как Python - PullRequest
0 голосов
/ 15 апреля 2020

Python

При открытии файла .h5 в Python с использованием пакета таблиц и кода:

import tables as ta
h5 = ta.open_file("file.h5")

h5 Файловый объект имеет большое количество узлов, видимых в окне переменных. Информация, которую я ищу, находится внутри узла root ( type {RootGroup}). В частности, есть три подузла:

1) _v_attrs типа {AttributeSet}

2) annotation типа {Group}

3 ) data типа {Group}

Все это доступно, когда я получаю доступ через Python. то есть tz = h5.root._v_attrs.record_timezone

R

Я пытаюсь читать в этих же узлах в R , но я не вижу всех различных узлов. Когда я перечисляю содержимое файла HDF5, используя пакет hdf5

library(rhdf5)
h5ls("file.h5")

, я только представлен с группами, то есть вижу только узлы annotation и data.

                  group       name       otype   dclass     dim
0                      / annotation   H5I_GROUP                 
1            /annotation      epoch   H5I_GROUP                 
2      /annotation/epoch      dad12 H5I_DATASET COMPOUND      21
3      /annotation/epoch      dad18 H5I_DATASET COMPOUND      21
4      /annotation/epoch      dad24 H5I_DATASET COMPOUND      22
5      /annotation/epoch       dad4 H5I_DATASET COMPOUND      21
6      /annotation/epoch       hour H5I_DATASET COMPOUND     528
7            /annotation  hrv_rmssd   H5I_GROUP                 
8  /annotation/hrv_rmssd      dad12 H5I_DATASET COMPOUND       0
9  /annotation/hrv_rmssd      dad18 H5I_DATASET COMPOUND       0
10 /annotation/hrv_rmssd      dad24 H5I_DATASET COMPOUND       0
11 /annotation/hrv_rmssd       dad4 H5I_DATASET COMPOUND       0
12 /annotation/hrv_rmssd       hour H5I_DATASET COMPOUND       0
13           /annotation        raw   H5I_GROUP                 
14       /annotation/raw      dad12 H5I_DATASET COMPOUND       0
15       /annotation/raw      dad18 H5I_DATASET COMPOUND       0
16       /annotation/raw      dad24 H5I_DATASET COMPOUND       0
17       /annotation/raw       dad4 H5I_DATASET COMPOUND       0
18       /annotation/raw       hour H5I_DATASET COMPOUND       0
19                     /       data   H5I_GROUP                 
20                 /data      epoch H5I_DATASET COMPOUND 1051172
21                 /data        raw H5I_DATASET COMPOUND       0

Они доступны с использованием кода data <- h5read("file.h5", "/data/epoch") в качестве примера.

Вопрос

Как читать в других узлах AttributeSet в R?

1 Ответ

0 голосов
/ 16 апреля 2020

Возможно, вы захотите взглянуть на HDFql , поскольку он не только освобождает вас от низкоуровневых деталей HDF5, но также способствует переносимости кода между разнородными языками программирования при обработке файлов HDF5 (то есть HDFql гарантирует, что окончательный вариант результат всегда один и тот же независимо от используемого языка без особых изменений в коде.)

В Python с использованием HDFql вы можете получить атрибуты объекта (то есть группы или набора данных), выполнив в качестве примера:

import HDFql

HDFql.execute("SHOW ATTRIBUTE my_file.h5 my_object/")

while HDFql.cursor_next() == HDFql.SUCCESS:

   print("Attribute found: %s" % HDFql.cursor_get_char())

В R с использованием HDFql это делается почти так же, как в Python (см. сходство):

source("HDFql.R")

hdfql_execute("SHOW ATTRIBUTE my_file.h5 my_object/")

while(hdfql_cursor_next() == HDFQL_SUCCESS)
{
   print(paste("Attribute found:", hdfql_cursor_get_char()))
}

Если вам нужно получить все атрибуты всех объектов, хранящихся в файле HDF5 (рекурсивным способом), делают в Python следующее (в R это будет очень похоже на это, поэтому я пропущу его публикацию):

import HDFql

HDFql.execute("SHOW ATTRIBUTE my_file.h5 / LIKE **")

while HDFql.cursor_next():

   print("Attribute found: %s" % HDFql.cursor_get_char())

Дополнительные примеры использования HDFql как в Python, так и в R можно найти здесь .

...