h5read与大字符串崩溃

时间:2014-04-16 03:15:05

标签: r hdf5

我使用hdf5包编写了rhdf5个文件。 h5ls(myHDF5,all=TRUE)的输出如下:

  group      name       otype  dclass       dim
0     /     char5 H5I_DATASET  STRING   1867124
1     /     char6 H5I_DATASET  STRING   1867124
2     /     char7 H5I_DATASET  STRING   1867124
3     /      dims H5I_DATASET INTEGER         2
4     /   headers H5I_DATASET  STRING       212
5     /       int H5I_DATASET INTEGER 233390500
6     /  intorder H5I_DATASET INTEGER       125
7     /      real H5I_DATASET   FLOAT 156838416
8     / realorder H5I_DATASET INTEGER        84

如果我在headers文件中读取myHDF5对象(字符串向量),如下所示:headers<-h5read(myHDF5,"headers"),它可以正常工作。

但如果我尝试按如下方式读取更大的字符串向量:char5<-h5read(myHDF5,"char5")则R崩溃(R Studio重新加载)。

之前已存储较大的字符串数组char5,如下所示:

nr<-length(char5)
mxsize<-max(nchar(char5))  
h5createDataset(myHDF5,"char5",storage.mode="character",level=9,dims=nr,chunk=10000,size=mxsize)
h5write(char5,myHDF5,"char5) 

虽然较小的字符串数组headers先前已按如下方式存储:

nc<-length(headers)
mxsize<-max(nchar(headers))  
h5createDataset(myHDF5,"headers",storage.mode="character",level=9,dims=nc,chunk=nc,size=mxsize)
h5write(headers,myHDF5,"headers")

主要区别在于使用的chunk大小值。我将较大字符串向量的chunk大小更改为与dims相同,即chunk=nr,并且R仍然崩溃。

为什么R会崩溃?

注意:如果我从myHDF5文件读取整数或浮点数据,R不会崩溃。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。一个简单的解决方案虽然不完美,但使用的是“h5r”包:

library(h5r)

f <- H5File(h5FilePath)
g <- getH5Group(f, "/")
d <- getH5Dataset(g, "stringArray")[]