0

我无法使用 rhdf5 使用低级 API 将字符串写入 hdf5 文件中的组,特别是函数

  • H5F创建
  • H5G创建
  • H5Screate
  • H5D创建
  • H5D写

这是我的数据:

# strings
v <- c("val1", "val2", "cat", "dog")

我希望这个向量 v 存在于一个名为“元数据”的 hdf5 组中。在这里,我尝试将此一维字符数组写入文件:

filename <- '/tmp/test.hdf5'

if(file.exists(filename)) {
  file.remove(filename)
}

h5createFile(filename)
fid <- H5Fcreate(filename)    
g2 <- H5Gcreate(fid, "/metadata") 
dtype <- "H5T_C_S1"
sid <- H5Screate_simple(NROW(v))
g <- H5Dcreate(g2, "v", dtype, sid) 
H5Dwrite(g, v, h5spaceMem = sid, h5spaceFile = sid)
H5Dclose(g)
H5Sclose(sid)
h5closeAll()

但是当我读到它时:

> h5read(filename,"/metadata/", bit64conversion="bit64")
$v
[1] "" "" "" ""

它完全是空白的。维度和类型都对,但没有内容。

你可以看到它 /there/ 但我无法提取数据:

> h5ls(filename, all=TRUE)
      group     name         ltype corder_valid corder cset       otype
0         / metadata H5L_TYPE_HARD        FALSE      0    0   H5I_GROUP
1 /metadata        v H5L_TYPE_HARD        FALSE      0    0 H5I_DATASET
  num_attrs dclass      dtype  stype rank dim maxdim
0         0                             0           
1         0 STRING H5T_STRING SIMPLE    1   4      4

我可以使用 rhdf5/read/hdf5 文件,并且可以在 python 中使用 h5py 写入/写入,所以我知道机器设置了正确的二进制文件以进行 hdf5 访问。但是我做错了什么,我不能在 R 中编写 hdf5 字符向量?

4

1 回答 1

0

为什么不这样做:

if(file.exists(filename)) {
  file.remove(filename)
}
h5createFile(filename)
h5createGroup(file = filename, group = "/metadata")
h5write(file = filename, obj = v, name = "/metadata/v")
h5closeAll()
h5ls(filename)
h5read(file = filename, name = "/metadata/v")
于 2019-12-01T11:10:12.457 回答