Как сохранить переменные из файла 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, которая примет все содержимое файла и сохранит его как переменную, сохраняя структуру.