【问题标题】:h5read crashes with large stringsh5read 因大字符串而崩溃
【发布时间】:2014-05-30 16:06:58
【问题描述】:

我有一个使用rhdf5 包编写的hdf5 文件。 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

如果我在myHDF5 文件中读取headers 对象,它是一个字符串向量,如下所示: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 不会崩溃。

【问题讨论】:

  • 直接运行 R 而不是通过 RStudio 会发生什么?
  • 不幸的是同样的事情。
  • @CarlWitthoft,对不起,我对我之前的评论感到不好。我通过 RScript 直接运行 R,它运行良好(我重复了它),但 RStudio 每次都崩溃。你能帮忙吗?
  • 在这种情况下,将问题发布到 RStudio 论坛。
  • @CarlWitthoft,谢谢。我就是这么做的

标签: r hdf5


【解决方案1】:

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

library(h5r)

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

【讨论】:

    猜你喜欢
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 2018-04-10
    相关资源
    最近更新 更多