Hi Michael,

Thanks for this - I used runif to write the following function, which will return the same number of fixed width regions for each chromosome as a given genomic ranges object and make sure that they are non overlapping.

Cheers
Anna

randomGRangesFixedWidth <- function(granges, width) {
  random.gr <- GRanges()
  for(i in 1:length(seqnames(granges)@values)) {
    curr.ir <- IRanges()
    while(length(curr.ir) < seqnames(granges)@lengths[i]) {
      nToAdd <- seqnames(granges)@lengths[i] - length(curr.ir)
temp.ir <- IRanges(start=as.integer(runif(nToAdd, min=1, max=seqlengths(granges)[seqnames(granges)@values[i]]-(width -1))), width=width)
      curr.ir <- c(curr.ir, temp.ir)
      curr.ir <- asNormalIRanges(curr.ir)
      curr.ir <- curr.ir[width(curr.ir) ==width]
      curr.ir <- IRanges(curr.ir)
    }
random.gr <- c(random.gr, GRanges(seqnames=rep(seqnames(granges)@values[i], seqnames(granges)@lengths[i]), ranges=asNormalIRanges(curr.ir)))
  }
  seqlengths(random.gr) <- seqlengths(granges)
  return(random.gr)
}

On 02/12/10 15:23, Michael Dondrup wrote:
Hi,

I don't know about a specific function (maybe there is) so I use the following 
code to simulate ranges.
I simplified it a bit so it might not directly run but shows the concept.

simulate.GRanges<-  function (n, mean.length, genome.size ){
  # assuming read lengths are poisson distributed around the mean length, you 
could use a different random function
  # assuming reads are uniformly distributed wrt. start position
   ir = IRanges(start=as.integer(runif(n, min=1, max=genome.size)), 
width=rpois(n, mean.length))
   ir = restrict(ir, 1, genome.size) # cut off reads at the end, not perfect
   strand = Rle(sample(x=c("+","-", "*"), size=n, replace=TRUE)) # make some 
strand information
   gr = GRanges(ir , seqnames="chr1",
     seqlengths=genome.size,
     strand=strand, universe="Mygenome")
   return(gr)
}

You just need to get an estimate of read-length distribution from somewhere 
then.

Hope this is useful

Michael

On Dec 2, 2010, at 4:06 PM, Anna Terry wrote:

Hi,

Is there any function in GenomicRanges (or other package) for getting a set of 
random ranges based on size distribution of a sample set?
Similar functions are available in bedTools( 
http://code.google.com/p/bedtools/wiki/Usage#shuffleBed) and Random Intervals 
from the ENCODE tools on Galaxy.

Many Thanks
Anna

_______________________________________________
Bioc-sig-sequencing mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/bioc-sig-sequencing

--
Anna Terry
Lymphocyte Development
MRC Clinical Sciences Centre
Imperial College Faculty of Medicine
Hammersmith Hospital
Du Cane Road
London W12 0NN

Tel:    0208 3832140
        0208 3832145
Email: [email protected]

_______________________________________________
Bioc-sig-sequencing mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/bioc-sig-sequencing

Reply via email to