1

我有一个带有多个变量的 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 它可以工作。如何实施?

4

1 回答 1

1

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

于 2016-09-20T08:49:14.817 回答