Как сохранить переменные из файла hdf5, используя строки в качестве имен переменных?

У меня есть файл hdf5 с несколькими переменными, которые я хочу автоматически сохранить в списке или матрице.

library(rhdf5)
file = H5Fopen("myfile.h5")
file
HDF5 FILE
        name /
    filename 

                       name       otype  dclass         dim
0  AGB_CO                   H5I_DATASET FLOAT   3          
1  AGB_CUT                  H5I_DATASET FLOAT   17 x 11 x 1
2  AGB_GROWTH               H5I_DATASET FLOAT   17 x 11 x 1
3  AGB_MORT                 H5I_DATASET FLOAT   17 x 11 x 1
4  AGE                      H5I_DATASET FLOAT   1          
5  AREA                     H5I_DATASET FLOAT   1          
6  AREA_SI                  H5I_DATASET FLOAT   1          
7  BALIVE                   H5I_DATASET FLOAT   3          
8  BASAL_AREA_CUT           H5I_DATASET FLOAT   17 x 11 x 1
9  BASAL_AREA_GROWTH        H5I_DATASET FLOAT   17 x 11 x 1
10 BASAL_AREA_MORT          H5I_DATASET FLOAT   17 x 11 x 1

h5info=h5ls("myfile.h5")
names=h5info$name
names
 [1] "AGB_CO"                   "AGB_CUT"                  "AGB_GROWTH"               "AGB_MORT"                
 [5] "AGE"                      "AREA"                     "AREA_SI"                  "BALIVE"                  
 [9] "BASAL_AREA_CUT"           "BASAL_AREA_GROWTH"        "BASAL_AREA_MORT"          "BA_CO"         

Я могу получить доступ к любой переменной в файле, набрав

file$AGB_CO
[1] 0.04595303 0.02707645 0.03625819

Теперь я хотел бы использовать цикл для сохранения всех переменных в памяти. Что-то вроде

for (i in 1:names) {
    vari=paste0("file$",names[i])
    assign(vari,NA)
    *some list or matrix*=as.name(vari)
}

Я пробовал метод assign(), eval(), as.name(), ни один из них не работает, но я не могу сохранить их в другую переменную. Однако, если я наберу myvar=file$AGB_CO, это сработает. Как это реализовать?

1 ответ

Решение

Есть два решения, которые я нашел. Одним из них является использование вышеупомянутой команды h5read("myfile.h5","/"), в противном случае rhdf5 имеет специальную команду h5dump, которая примет все содержимое файла и сохранит его как переменную, сохраняя структуру.

Другие вопросы по тегам