在R中读取ARCHS4的HDF5文件时出现H5Identifier无效错误怎么办?
问题描述
我下载了ARCHS4的28G人类HDF5文件(archs4_gene_human_v2.1.2.h5),想要从中提取表达数据和分组信息。执行以下代码时抛出错误:
h5_exprs <- h5read("archs4_gene_human_v2.1.2.h5", "data/expression")
Error (scratch_11.R#9): Error in h5checktype(). H5Identifier not valid.
但运行h5ls("archs4_gene_human_v2.1.2.h5")可以正常显示文件结构,输出如下:
group name otype dclass dim 0 / data H5I_GROUP 1 /data expression H5I_DATASET INTEGER 620825 x 62548 2 / meta H5I_GROUP 3 /meta genes H5I_GROUP 4 /meta/genes gene_symbol H5I_DATASET STRING 62548 5 /meta samples H5I_GROUP 6 /meta/samples aligned_reads H5I_DATASET INTEGER 620825 7 /meta/samples channel_count H5I_DATASET STRING 620825 8 /meta/samples characteristics_ch1 H5I_DATASET STRING 620825 9 /meta/samples contact_address H5I_DATASET STRING 620825 10 /meta/samples contact_city H5I_DATASET STRING 620825 11 /meta/samples contact_country H5I_DATASET STRING 620825 12 /meta/samples contact_institute H5I_DATASET STRING 620825 13 /meta/samples contact_name H5I_DATASET STRING 620825 14 /meta/samples contact_zip H5I_DATASET STRING 620825 15 /meta/samples data_processing H5I_DATASET STRING 620825 16 /meta/samples extract_protocol_ch1 H5I_DATASET STRING 620825 17 /meta/samples geo_accession H5I_DATASET STRING 620825 18 /meta/samples instrument_model H5I_DATASET STRING 620825 19 /meta/samples last_update_date H5I_DATASET STRING 620825 20 /meta/samples library_selection H5I_DATASET STRING 620825 21 /meta/samples library_source H5I_DATASET STRING 620825 22 /meta/samples library_strategy H5I_DATASET STRING 620825 23 /meta/samples molecule_ch1 H5I_DATASET STRING 620825 24 /meta/samples organism_ch1 H5I_DATASET STRING 620825 25 /meta/samples platform_id H5I_DATASET STRING 620825 26 /meta/samples relation H5I_DATASET STRING 620825 27 /meta/samples series_id H5I_DATASET STRING 620825 28 /meta/samples singlecellprobability H5I_DATASET FLOAT 620825 29 /meta/samples source_name_ch1 H5I_DATASET STRING 620825 30 /meta/samples sra_id H5I_DATASET STRING 620825 31 /meta/samples status H5I_DATASET STRING 620825 32 /meta/samples submission_date H5I_DATASET STRING 620825 33 /meta/samples taxid_ch1 H5I_DATASET STRING 620825 34 /meta/samples title H5I_DATASET STRING 620825 35 /meta/samples type H5I_DATASET STRING 620825
求解决该错误的可行步骤。
解决步骤
1. 校验文件完整性
28G的大文件很容易在下载过程中损坏,导致读取大矩阵时出错。可以用官方提供的校验和(如SHA256)对比本地文件的校验值,确认文件是否完整。若不匹配,重新下载文件。
2. 分块读取大矩阵
直接读取620825 x 62548的整数矩阵会占用极大内存,超出系统承载能力进而触发错误。建议分块读取:
library(rhdf5) # 打开HDF5文件连接 h5_file <- H5Fopen("archs4_gene_human_v2.1.2.h5") # 设置分块大小,可根据内存调整 chunk_size <- 1000 total_samples <- 620825 expr_list <- list() # 循环分块读取 for(i in seq(1, total_samples, chunk_size)){ end <- min(i + chunk_size - 1, total_samples) expr_chunk <- h5read(h5_file, "data/expression", index=list(i:end, NULL)) expr_list[[length(expr_list)+1]] <- expr_chunk } # 合并分块数据 h5_exprs <- do.call(rbind, expr_list) # 关闭文件连接 H5Fclose(h5_file)
3. 更新rhdf5包
旧版本的rhdf5可能存在HDF5标识符处理的bug,更新到最新版本:
if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager") BiocManager::install("rhdf5")
4. 检查系统HDF5库兼容性
确保系统安装的HDF5库版本与rhdf5依赖的版本兼容。可以通过h5version()查看当前使用的HDF5版本,若版本过低,更新系统的HDF5库(Ubuntu用apt-get install libhdf5-dev,CentOS用yum install hdf5-devel,macOS可通过Homebrew安装hdf5)。
内容的提问来源于Stack Exchange,提问作者Nmgh
相关产品推荐
相关产品推荐

