gpt4 book ai didi

r - 查找定义的一组范围之外的所有范围

转载 作者:行者123 更新时间:2023-12-05 01:06:15 25 4
gpt4 key购买 nike

我想知道定义给定范围集未涵盖的所有范围的最佳方法是什么。例如,如果我有一组已知坐标的基因:

dtGenes <- fread(
"id,start,end
1,1000,1300
2,1200,1500
3,1600,2600
4,3000,4000
")

假设我知道染色体的总长度(为简单起见,假设它们都在同一条染色体上)是 10000。所以,最后我希望有以下基因间区域列表:
"startR,endR
0,1000
1500,1600
2600,3000
4000,10000
"

can Bioconductor的 IRange在这里有用吗?或者还有其他一些好的方法来解决这个问题?

最佳答案

使用 Bioconductor 包 GenomicRanges ,将您的原始数据转换为 GRanges

library(GenomicRanges)
gr <- with(dtGenes, GRanges("chr1", IRanges(start, end, names=id),
seqlengths=c(chr1=10000)))

然后找到你的基因之间的差距
gaps <- gaps(gr)
GRanges知道链。您没有在 GRanges 中指定链构造函数,所以链被分配 * .因此,+、- 和 * 链上存在“间隙”,您只对 * 链上的那些感兴趣
> gaps[strand(gaps) == "*"]
GRanges with 4 ranges and 0 metadata columns:
seqnames ranges strand
<Rle> <IRanges> <Rle>
[1] chr1 [ 1, 999] *
[2] chr1 [1501, 1599] *
[3] chr1 [2601, 2999] *
[4] chr1 [4001, 10000] *
---
seqlengths:
chr1
10000

请注意 Bioconductor 约定,染色体从 1 开始,并且范围是封闭的—— startend坐标包含在范围内。使用 shiftnarrowgr使您的范围符合 Bioconductor 惯例。 GRanges 操作在数百万范围内的数十个范围内是有效的。

关于r - 查找定义的一组范围之外的所有范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20273652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com