在我们现在基于scanp的单细胞流程中,有一步需要将AnnData对象保存为loom格式。但是与保存为h5ad不同,当我们不做任何处理,将AnnData对象写入loom文件后再次读取时,会发现obs和var的索引(index)信息丢失了,这些索引(通常是细胞条形码和基因名)变成了普通的数字编号。
问题描述
根据实际的测试和write_loom方法的文档,中的描述,可以推测实际的读写,write_loom 写入时,实际上的不会写入obs和var两个表中的index部分,即使通过参数指定write_obsm_varm=True,写入时也只会按照固定的名称分别产生两个新列(obs_names和var_names)。
而根据read_loom方法的文档,read_loom在读取的时候,实际上要在obs中找名为CellID的列,在var中找名为Gene的列来分别作为两张表的编号。
这样一来一去,默认不存index,即使存了index,write_loom存的和read_loom读的也并不一致,就像两个部门对接没有做好,关键信息就这么没了…
解决方案
我的目的是尽可能不对原流程代码进行变更,因此直接产生原流程可读的loom文件是最好的方式:
1 | # 保存索引信息到obs和var的列中 |