5

我已经在 linux 机器上成功安装了 hdf5 包。我现在希望循环读取大量 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 可以读取可以写入”。

简而言之,我的问题是:使用 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 回答