R 向两个方向扩展范围

R 向两个方向扩展范围,r,bioconductor,iranges,R,Bioconductor,Iranges,我有一个GRanges对象,我想扩展所有范围,例如两侧1kb,因此每个范围将变长2kb。这很奇怪,但我无法使用GenomicRanges或IRanges的范围内方法来做到这一点。产生所需结果的一种方法是使用“调整大小”两次,首先扩展5',然后扩展3'。但这当然是非常尴尬的。难道没有更直接的方法吗?请指教 gr <- GRanges(c('chr1','chr1'), IRanges(start=c(20, 120), width=10), strand='+') gr <- resi

我有一个GRanges对象,我想扩展所有范围,例如两侧1kb,因此每个范围将变长2kb。这很奇怪,但我无法使用GenomicRanges或IRanges的
范围内方法来做到这一点。产生所需结果的一种方法是使用“调整大小”两次,首先扩展5',然后扩展3'。但这当然是非常尴尬的。难道没有更直接的方法吗?请指教

gr <- GRanges(c('chr1','chr1'), IRanges(start=c(20, 120), width=10), strand='+')
gr <- resize(gr, fix='start', width=width(gr)+10)
gr <- resize(gr, fix='end', width=width(gr)+10)
gr

gr非常简单。您可以在
genomarranges
中使用
start
end
函数

gr <- GRanges(c('chr1','chr1'), IRanges(start=c(20, 120), width=10), strand='+')
gr
# GRanges object with 2 ranges and 0 metadata columns:
#       seqnames     ranges strand
#          <Rle>  <IRanges>  <Rle>
#   [1]     chr1 [ 20,  29]      +
#   [2]     chr1 [120, 129]      +
#   -------
#   seqinfo: 1 sequence from an unspecified genome; no seqlengths

start(gr) <- start(gr) - 10
end(gr) <- end(gr) + 10
gr
# GRanges object with 2 ranges and 0 metadata columns:
#      seqnames     ranges strand
#         <Rle>  <IRanges>  <Rle>
#  [1]     chr1 [ 10,  39]      +
#  [2]     chr1 [110, 139]      +
#  -------
#  seqinfo: 1 sequence from an unspecified genome; no seqlengths

grGRanges支持诸如-和+

gr + 10 

会成功的。

三年后,但是

直接的方法是使用带有fix参数的GRanges的resize方法:

gr <- resize(gr, width = width(gr)+(desired_size*2), fix = "center")

当然可以。但是,由于有这么多函数用于更改范围(调整大小、缩小范围等),或者基于现有范围(侧面、促进者)定义新范围,因此我希望有一个专用函数能够完成这个相当简单但(我认为)非常有用的操作。