2016-08-24 11 views
0

私はリストやマトリックスに自動的に保存したい複数の変数を持つ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 

を入力して、ファイル内の任意の変数にアクセスすることができます。私はアサイン()、のeval()、as.name()を試してみました

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

のようなもの、それらのどれも働かないが、私は別の変数にそれらを保存することはできませんよ。 しかし、myvar = file $ AGB_COと入力すると動作します。これを実装する方法は?

+0

なぜh5read( "myfile.h5"、 "/")を使用しないのですか? – user3507085

+0

@ user3507085も同様です。私もh5dumpを使いました。とても便利でした。 –

答えて

0

私が見つけた解決策は2つあります。 1つは、上記のコマンドh5read( "myfile.h5"、 "/")を使用することです。そうでなければ、rhdf5にはファイルの内容をとり、構造を保持したまま変数として保存する特定のコマンドh5dumpがあります。