来源
LDSC 生态里那份标准的 HapMap3 SNP 清单,从 Zenodo 取 w_hm3.snplist.gz 解压转成 CSV。三列:位点的 rsID 和两个等位基因。一行是一个 SNP。
脚本读的时候把三列都强制成字符型(colClasses = "character"),并且顺手去掉了原文件可能带的表头行。等位基因必须当字符读——a1/a2 里没有数字,但 rsID 前缀去掉后是纯数字,任何"聪明"的类型推断都可能把它读坏。
用之前要知道的
它没有位置信息。 只有 rsID 和等位基因,没有染色体、没有坐标、没有频率。它的用途是做交集:把 GWAS 汇总统计过滤到 HapMap3 这个子集上,这是 LDSC 跑 LD score regression 前的标准一步。想要位置得另外 join 一份带坐标的参考。
等位基因是 A/C/G/T 单碱基。 没有 indel,这是 HapMap3 清单本身的口径。
121.7 万行是这批数据里唯一超过百万的。 拿它试性能是合理的:data.table::fread 对 read.csv、polars 对 pandas,差距在这个量级上才看得出来。25MB 的 CSV 用 read.csv() 读会明显卡一下,用上面给的 read_csv() 加类型规格会快得多——因为不用猜类型。
适用图形
坦白说它不适合画图,收它是为了"拿来用",不是"拿来画"。
| 图形结构 | 用途 |
|---|---|
| 条形图 | a1 / a2 的碱基构成,各四档 |
| 二维计数热图 | a1 × a2 的 4×4 组合频次,能看出转换与颠换的比例 |
那个 4×4 热图倒是个不错的小练习:转换(A↔G、C↔T)应该明显多于颠换,这是真实的分子生物学事实,能拿它验证自己的图有没有画反。