在R中加载后如何关闭hdf5文件?

时间:2012-10-02 17:35:01

标签: r hdf5

我已经在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文件的连接?

1 个答案:

答案 0 :(得分: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采用文件名,但也可能采用文件句柄。如果是这样,这可能会奏效。