如何用Nullranges生成200条全基因组随机200kbp的Genomic Ranges
问题与解决方案
问题
需要生成200条长度均为200kbp的全基因组随机Genomic Ranges,使用nullranges时遇到以下问题:
- 示例中
bootRanges生成的区间数量与原数据集(dhs)一致(约6000条),无法指定生成200条 - 担心用自有200特征数据集时,无法保证区间的全基因组分布且与原数据无重叠
- 基于全基因组密度分段的示例输出不符合需求
解决方案
核心是用sampleRanges替代bootRanges,直接指定生成数量,同时基于基因密度分段保证全基因组分布,步骤如下:
1. 核心代码(生成指定数量的全基因组随机区间)
library(nullrangesData) library(plyranges) library(nullranges) library(ExperimentHub) # 获取排除区域(如重复序列)和基因密度分段数据 eh <- ExperimentHub() exclude <- eh[["EH7306"]] seg_cbs <- eh[["EH7307"]] # 设置参数:目标区间数量、每条长度(200kbp) n_target <- 200 range_length <- 2e5 # 生成随机区间:基于基因密度分段采样,排除不可用区域 set.seed(5) random_ranges <- sampleRanges( x = seg_cbs, n = n_target, length = range_length, exclude = exclude, replace = FALSE ) # 验证结果 length(random_ranges) # 输出应为200 random_ranges
2. 可选:确保生成区间与原数据无重叠
如果需要生成的区间完全不与原dhs数据集重叠,可添加以下步骤:
# 加载并过滤原dhs数据 dhs <- DHSA549Hg38() %>% plyranges::filter(signalValue > 100) # 移除与dhs重叠的随机区间 random_ranges <- random_ranges %>% plyranges::filter_by_non_overlaps(dhs) # 若过滤后数量不足,补充采样(循环直到满足目标数量) while(length(random_ranges) < n_target) { need <- n_target - length(random_ranges) add_ranges <- sampleRanges( x = seg_cbs, n = need, length = range_length, exclude = c(exclude, dhs), replace = FALSE ) random_ranges <- c(random_ranges, add_ranges) }
关键说明
sampleRangesvsbootRanges:前者可直接指定生成区间数量,后者是对原数据集的bootstrap重抽样,数量与原数据一致- 基于
seg_cbs采样:保证生成的区间在全基因组的分布与基因密度匹配,符合全基因组随机分布要求 exclude参数:避免区间落在重复序列等不可用区域- 去重叠逻辑:通过
filter_by_non_overlaps和循环补充,确保最终输出数量达标且无重叠
内容的提问来源于stack exchange,提问作者erman
相关产品推荐
相关产品推荐

