x <- IRanges(c(1, 5, -2, 0, 14), c(10, 9, 3, 11, 17))
  subject <- Rle(1:-3, 6:2)
  y <- Views(subject, start=c(14, 0, -5, 6, 18), end=c(20, 2, 2, 8, 20))
  ## Vector-wise operations:
  union(x, ranges(y))
  union(ranges(y), x)
  intersect(x, ranges(y))
  intersect(ranges(y), x)
  setdiff(x, ranges(y))
  setdiff(ranges(y), x)
  ## Element-wise (aka "parallel") operations:
  try(punion(x, ranges(y)))
  punion(x[3:5], ranges(y)[3:5])
  punion(x, ranges(y), fill.gap=TRUE)
  try(pintersect(x, ranges(y)))
  pintersect(x[3:4], ranges(y)[3:4])
  pintersect(x, ranges(y), resolve.empty="max.start")
  psetdiff(ranges(y), x)
  try(psetdiff(x, ranges(y)))
  start(x)[4] <- -99
  end(y)[4] <- 99
  psetdiff(x, ranges(y))
  pgap(x, ranges(y))
  ## On RangesList objects:
  irl1 <- IRangesList(a = IRanges(c(1,2),c(4,3)), b = IRanges(c(4,6),c(10,7)))
  irl2 <- IRangesList(c = IRanges(c(0,2),c(4,5)), a = IRanges(c(4,5),c(6,7)))
  union(irl1, irl2)
  intersect(irl1, irl2)
  setdiff(irl1, irl2)
Run the code above in your browser using DataLab