在 R 中加载后,我应该如何关闭 hdf5 文件?

Posted

技术标签:

【中文标题】在 R 中加载后,我应该如何关闭 hdf5 文件?【英文标题】:How should I close an hdf5 file after loading in R? 【发布时间】:2012-09-23 14:28:50 【问题描述】:

我已经在一台 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 文件后,如何关闭与它的连接?

【问题讨论】:

R 正在中止,您应该联系hdf5 包的维护者,因为这不应该发生。维护者也可能会告诉您关闭文件的正确调用。 【参考方案1】:

注意:根据 cmets,以下答案无效。留下它,至少现在是为了标记一条不成功的路线。


我没有安装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 采用文件名,但它也可能采用文件句柄。如果是这样,这可能会起作用。

【讨论】:

感谢您的及时答复! open() 函数用于“连接”类,因此在这里不起作用。它给了我尝试fhandle &lt;- file(description = fname, open = "rb")的想法 我可以打开文件并使用 close(fhandle) 关闭它,但不幸的是 hdf5load(fhandle) 返回错误 first argument must be a pathname。如需更多信息,hdf5load 函数为:function (file, load = TRUE, verbosity = 0, tidy = FALSE) call &lt;- sys.call() .External("do_hdf5load", call, sys.frame(sys.parent()), file, load, as.integer(verbosity), as.logical(tidy), PACKAGE = "hdf5")

以上是关于在 R 中加载后,我应该如何关闭 hdf5 文件?的主要内容,如果未能解决你的问题,请参考以下文章

dll中的资源字符串在程序中加载后不完全可见

用于python和R之间数据交换的HDF5

我应该使用哪个函数将非结构化文本文件读入 R? [关闭]

如何在R中加载和处理非常大的数据文件[关闭]

图像在 iframe 中加载后未从缓存中加载

如何在 R 中将保存在 pandas 中的数据框作为 HDF5 文件加载?