R中使用coloc包如何按单个SNP循环执行coloc.abf共定位分析
问题原因
- 原有代码存在两个核心错误:
- 对数据框直接执行
lapply会默认遍历每一列,而非你需要的每一行 - 循环体内完全没有用到迭代变量
i,每次调用coloc.abf都传入了全量的beta、se、p值向量,因此1000次运行结果都和全数据集分析结果一致
- 对数据框直接执行
修正代码
# 遍历行索引逐SNP执行共定位分析 individual <- lapply(1:1000, function(i){ # 每次仅传入第i个SNP的对应统计量 coloc.abf( p1 = dataset$p1[i], beta1 = dataset$beta1[i], se1 = dataset$se1[i], p2 = dataset$p2[i], beta2 = dataset$beta2[i], se2 = dataset$se2[i] ) })
如果需要将所有SNP的结果整理为可直接查看的表格,可以额外执行以下代码:
# 提取所有SNP的后验概率结果合并为数据框 pp_result <- do.call(rbind, lapply(individual, function(x) x$summary)) # 给结果行添加SNP编号标识 rownames(pp_result) <- paste0("SNP_", 1:1000)
内容的提问来源于stack exchange,提问作者ayeepi
相关产品推荐
相关产品推荐

