9

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

  • Mac OS X 10.6 上的 R 2.10.0 (x64)
  • hdf5 1.8.3 通过 macports 安装
  • 来自 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" { GROUP "/" { DATASET "dset" { DATATYPE H5T_STD_I32LE DATASPACE SIMPLE { ( 31 ) / ( 31 ) } DATA { (0): 1, 2, 4 , 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, (14): 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 2097152, 2097152, (2) 386493, (2) , 16777216, 33554432, 67108864, 134217728, (28): 268435456, 536870912, 1073741824 } } } }

有什么想法吗?

提前致谢。

4

2 回答 2

6

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

于 2011-04-18T21:54:20.947 回答
2

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

  • load: 一个逻辑值。如果为“FALSE”,则将对象作为命名列表的组件返回。如果为“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"
于 2009-11-14T01:21:24.450 回答