使用R语言rhdf5包写入int16数据失败,如何实现int16/uint16存储?
问题:如何用rhdf5将R中的整数矩阵以int16/uint16类型写入HDF5文件?
你遇到的问题是:使用rhdf5包创建HDF5数据集时指定了H5T_NATIVE_INT16类型,但写入数据后结果仍为int32。这是因为R中默认的整数类型是int32,且h5write函数默认会根据输入R对象的类型确定写入的HDF5数据类型,忽略之前创建数据集时指定的类型(甚至可能覆盖数据集的类型定义)。
要成功将数据存储为int16或uint16类型,只需在h5write时明确指定对应的H5数据类型即可,无需提前调用h5createDataset(当然也可以保留创建步骤,但必须保证写入时的类型与创建时一致)。
修正后的测试代码(int16版本)
library(rhdf5) # 创建R默认的int32类型整数矩阵 m <- matrix(1L, 5, 5) outFile <- "test_int16.h5" # 直接写入并指定H5数据类型为int16 h5write(m, file = outFile, name = "m", H5type = "H5T_NATIVE_INT16") H5close() # 查看结果 h5ls(outFile)
uint16版本代码
只需将H5type参数改为"H5T_NATIVE_UINT16"即可:
library(rhdf5) m <- matrix(1L, 5, 5) outFile <- "test_uint16.h5" h5write(m, file = outFile, name = "m", H5type = "H5T_NATIVE_UINT16") H5close() h5ls(outFile)
关键说明
- R本身没有原生的int16/uint16类型,输入矩阵默认是int32,但rhdf5会根据
H5type参数自动完成类型转换并写入HDF5文件。 - 如果提前用
h5createDataset创建了指定类型的数据集,写入时必须在h5write中指定相同的H5type,否则会因类型不匹配导致错误或覆盖原类型定义。
内容的提问来源于stack exchange,提问作者user21816
相关产品推荐
相关产品推荐

