R 和 HDF5 问题

Posted

技术标签:

【中文标题】R 和 HDF5 问题【英文标题】:R and HDF5 Troubles 【发布时间】:2010-12-16 02:03:34 【问题描述】:

我正在尝试将 hdf5 加载到 R 中并遇到一些问题。以下是我配置环境的步骤:

Mac OS X 10.6 上的 R 2.10.0 (x64) 通过 macports 安装 hdf5 1.8.3 来自 CRAN 的 hdf5_1.6.9.tar.gz

我怀疑我遇到的问题与我的 HDF5 版本和 R 模块所期望的不兼容有关。为了完整起见,这里是我安装 R 模块的方式:

R CMD INSTALL --configure-vars='CPPFLAGS=-I/opt/local/include' --configure-args='--with-hdf5=/opt/local' hdf5_1.6.9.tar.gz

这构建得很好。该库似乎可以毫无问题地加载,但是当我尝试加载文件时没有返回数据:

库(hdf5)

hdf5load("test.h5")

然而,

osx:data scott$ h5dump test.h5 HDF5“test.h5” 团体 ”/” 数据集“dset” 数据类型 H5T_STD_I32LE 数据空间简单 ( 31 ) / ( 31 ) 数据 (0):1、2、4、8、16、32、64、128、256、512、1024、2048、4096、8192、 (14):16384、32768、65536、131072、262144、524288、1048576、2097152、 (22): 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, (28):268435456、536870912、1073741824

有什么想法吗?

提前致谢。

【问题讨论】:

这不能回答你的问题,但我只是指出基于 R 2.10 的 Mac 构建失败:r-project.org/nosvn/R.check/r-release-macosx-ix86/…。 这是真的,但它几乎没有提供构建失败的原因。我手动构建它没有错误或警告... 不想听起来高傲,你确定 hdfload 正在寻找正确的目录,不是吗?我已经多次遇到这种事情了。 我刚刚检查以确保是的,我在正确的目录中。 你能运行hdfsave的帮助文件中的例子吗?它可以在我的 Mac (OS 10.6.2) 上使用相同的设置。 【参考方案1】:

您也可以在 CRAN 上试用 h5r 包。这个包使用了新的 hdf5 库,并提供了比 hdf5 库更多的功能。

【讨论】:

它似乎不在 CRAN 上,在 r-forge 上找到它 是的,很抱歉。它在 r-forge 上。 R-forge 曾经提供在 CRAN 上获取东西的功能,但我不知道它去了哪里。【参考方案2】:

hdfload() 中使用verbosity 参数,并使用ls() 检查您的环境。 hdfload() 有一个副作用,它将表加载到当前环境中,NULL 是默认返回值。如果您使用参数load=TRUE,则对象将作为命名列表的组件返回:

load:一个逻辑值。如果“假”, 对象作为 命名列表的组成部分。如果“TRUE”(默认值),则 对象作为具有自己的变量的单独变量加载 名称 - 在这种情况下,该函数不返回任何内容。

在我的 Mac 上,使用相同的设置一切正常。

R> rm(list=ls())
R> ls()
character(0)
R> hdf5load("TestHDF5.h5", verbosity=3)
hdf5_global_verbosity=3 load=1
Processing object: Dataset0 ...... its a dataset...Dataset has ID335544326
Dataset has tid 201326902
Dataset has space id 268435467
Dataset has rank 1
Dataset has dims/maxdims: 1 / 1 
Allocating vector with rank=1 dim=1
calling vector_io. Hangs here with big datsets
Setting buffer size in plist
About to read with bufsize = 50
in string_ref: count=1, size=25 srcbf=25
leaving string_ref
 Done read
in vector_io: permuting
in vector_io: tidying
Phew. Done it. calling iinfo->add
Rank > 1 or not VECSXP
Calling  hdf5_load_attributes 
back from  hdf5_load_attributes 
...Finished dataset 
Processing object: Table0 ...... its a dataset...Dataset has ID335544327
Dataset has tid 201326906
Dataset has space id 268435468
Dataset has rank 1
Dataset has dims/maxdims: 1 / 1 
Dataset has type = VECSXP and rank 1
Reading...
....done
in string_ref: count=1, size=25 srcbf=25
leaving string_ref
...Finished dataset 
NULL
R> ls()
[1] "Dataset0" "Table0"

【讨论】:

以上是关于R 和 HDF5 问题的主要内容,如果未能解决你的问题,请参考以下文章

递归地将 HDF5 文件读入 R

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

在 R 中读取大型 HDF5 文件

R 中的 hdf5 文件,用于通过 ID 进行快速随机访问

如何在 R 中将 hdf5 保存为 txt 或 csv?

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