处理GSE28491发现
原始exp探针数:18,391
ids中有映射的探针数:16,354(丢失2,037个,约11%)
实际唯一基因数:10,479
转换后实际行数:7,884(损失很大!)
根本原因
问题出在 trans_array 函数的实现上。关键代码:
ids = ids[!duplicated(ids$symbol), ] # 先在整个ids(41937个)上去重,保留每个symbol的第一个探针
exp = exp[rownames(exp) %in% ids$probe_id, ] # 然后才看哪些在exp中
这一行代码的问题:
它在 整个 ids(41937个探针)上对 symbol 去重,只保留每个基因的第一个 probe_id。但这个第一个探针可能根本不在你的 exp 中
具体例子
假设:
ids 中基因 ABC 有10个探针:probe1, probe2, ..., probe10
trans_array 去重后只保留 probe1
但 exp 中只有 probe3, probe5, probe7
因为 probe1 不在 exp 中,所以基因 ABC 的所有探针都被过滤掉了
但实际上 exp 中有 probe3, probe5, probe7,应该至少保留一个!