如何使用字符串作为变量名从 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,它将获取文件的所有内容并将其保存为变量,同时保持结构。
我有一个包含多个变量的 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,它将获取文件的所有内容并将其保存为变量,同时保持结构。