我希望能够在HDF 5中保存一个R TRUE/FALSE值,以便在将文件读入Python并检查数据类型是否为布尔时,测试能够通过。目前我无法做到这一点。如果我用途:
library(rhdf5)
h5file = H5Fcreate("newfile.h5")
h5space = H5Screate_simple(1,NULL, native = TRUE)
h5dataset1 = H5Dcreate(h5file, "dataset1", "H5T_NATIVE_HBOOL", h5space)
H5Dwrite(h5dataset1, TRUE)
h5closeAll()
如果我随后使用HDFView(3.1.3)检查变量,我可以看到保存的对象存储为8位无符号整数。
为了沿着np.array(getattr(x,attr)).dtype == bool
行的Python数据类型测试,该类型需要在HDFView中注册,如下所示:8位枚举(0=假,1=真)。
如何使用两个R HDF 5包rhdf5
或hdf5r
中的任何一个来编写这种类型的对象?
2条答案
按热度按时间jgwigjjp1#
您可能希望探索第三个选项/包HDFql。要创建一个名为
dataset1
的8位枚举数据集,其中包含两个成员(值为0
的FALSE
和值为1
的TRUE
),可以使用R中的HDFql执行以下操作:有关其他信息,请查看HDFql reference manual和examples的工作原理。
a11xaf1n2#
谢谢你的问题,很抱歉,我已经有一段时间没有时间回答了。
这在当时可用的rhdf5版本中是不可能的,并且还需要一种稍微不同的方法。
H5T_NATIVE_HBOOL
数据类型只是到无符号8位int的Map(至少在Linux上是这样)。要创建您正在寻找的枚举数据类型,您必须使用
H5Tenum_create()
创建一个自定义数据类型,然后使用H5Tenum_insert()
设置Map(例如TRUE = 1)。下面是一个例子。您需要rhdf5版本2.43.1或更新版本,可以从https://github.com/grimbough/rhdf5获得
我们可以使用
h5ls
命令行工具来检查数据类型是否为8位枚举,以及是否具有(0=FALSE,1=TRUE)Map。我们也可以把它读回R。
我不喜欢这个,因为你没有得到你写的东西。