You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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)
}

关键说明

  • sampleRanges vs bootRanges:前者可直接指定生成区间数量,后者是对原数据集的bootstrap重抽样,数量与原数据一致
  • 基于seg_cbs采样:保证生成的区间在全基因组的分布与基因密度匹配,符合全基因组随机分布要求
  • exclude参数:避免区间落在重复序列等不可用区域
  • 去重叠逻辑:通过filter_by_non_overlaps和循环补充,确保最终输出数量达标且无重叠

内容的提问来源于stack exchange,提问作者erman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 13:02:11