如何使用字符串作为变量名从 hdf5 文件中保存变量?

How do I save variables from hdf5 file using strings as variable names?

我有一个包含多个变量的 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()、none 它们都有效,但我无法将它们保存到另一个变量中。 但是,如果我输入 myvar=file$AGB_CO 它会起作用。如何实现?

我找到了两个解决方案。一种是使用上面提到的命令 h5read("myfile.h5","/"),否则 rhdf5 有一个特定的命令 h5dump,它将获取文件的所有内容并将其保存为变量,同时保持结构。