5

hdf5 パッケージを Linux マシンに正常にインストールしました。ループ内の多数の hdf5 ファイルからデータを読み込み、時系列を作成したいと考えています。各 hdf5 ファイルは異なる時間に対応しています。多くのファイル (1000 以上) を読み込んだ後、R は開いているファイルが多すぎると言います。ループを継続できるようにそれらを閉じる方法を見つけたいと思います。コードは次のとおりです。

    fdate <- "200605312355" # the first date for my test loop
    fmax <- 1400
    arr <- vector()

    for (i in 1:fmax){
      fname <- paste(fdate,"_.h5") # path of h5 file
      fid <- hdf5load(fname) # fid = NULL
      arr[i] <- somevariable$data_array[lon,lat]
      # would like to close the file here
      fdate <- newdate(fdate,60*5) # a function that increments the date by seconds.
    }

hdf5 パッケージには関数 hdf5cleanup が含まれており、クリーンアップするように見えますが、ファイル識別子が必要です。上記のコードの fid は NULL を返します。代わりにファイル名を挿入しようとします。つまり hdf5cleanup(fname) は R を中止させます。おそらく hdf5load はファイルを閉じるはずで、失敗します。その場合、system() コマンドなどを発行して接続を閉じる方法はありますか?

ちなみに、showConnections() は何も返さず、文字通り「説明クラス モード テキスト isopen can read can write」というヘッダー名だけを返します。

簡単に言えば、私の質問: hdf5load() でロードした後、R で hdf5 ファイルへの接続を閉じるにはどうすればよいですか?

4

1 に答える 1

2

注: コメントによると、次の回答は機能しません。少なくとも今のところは、失敗したルートを追跡するためにそれを残しておきます.


インストールしていないhdf5ため、これが機能するかどうかを確認できません。そのため、これは暗闇の中でのショットです。

fname <- paste(fdate,"_.h5") # path of h5 file
# fhandle <- open(fname) # Comment pointed out this was not the intended function
fhandle <- file(description = fname, open = "rb")
hdf5load(fhandle) # hdf5load returns nothing when load=TRUE (the default)
arr[i] <- somevariable$data_array[lon,lat]
close(fhandle)

ドキュメントにはファイル名をhdf5load取ると書かれていますが、ファイルハンドルを取ることもあります。もしそうなら、これはうまくいくかもしれません。

于 2012-10-02T18:40:04.560 に答える