在 GenomicRanges 中,一个有趣的问题是基因岛的识别。
我试图找到相邻范围不超过一定距离的最大范围子集。为了解决这个问题,我尝试根据各个范围之间的差异来分配组。
我在 IRanges 包中搜索了合适的方法,但到目前为止我还没有成功。
daf <- data.frame(seqnames="ConA",start=c(10,39,56,1000,5000),end=c(19,44,87,1100,5050),ID=paste0("Range",LETTERS[1:5]))
gr <- makeGRangesFromDataFrame(daf,keep.extra.columns=TRUE)
## Order the data frame by start column
oo <- order(daf$start)
daf <- daf[oo,]
# Calculate the distance
dd <- c(0,diff(daf$start))
daf$diff <- dd
daf$group <- rep(1,nrow(daf))
group <- 1
for(i in 1:nrow(daf)){
if(daf$diff[i] > 500){
group <- group + 1
}
daf$group[i] <- group
}
根据分配的组,可以找到最大的组。你知道任何更好的解决方案,避免 for 循环吗?