Identify closest intervals.

bed_closest(x, y, overlap = TRUE, suffix = c(".x", ".y"))

Arguments

x

tbl_interval()

y

tbl_interval()

overlap

report overlapping intervals

suffix

colname suffixes in output

Value

tbl_interval() with additional columns:

  • .dist distance to closest interval. Negative distances denote upstream intervals.

  • .overlap overlap with closest interval

Details

input tbls are grouped by chrom by default, and additional groups can be added using dplyr::group_by(). For example, grouping by strand will constrain analyses to the same strand. To compare opposing strands across two tbls, strands on the y tbl can first be inverted using flip_strands().

See also

Examples

x <- trbl_interval( ~chrom, ~start, ~end, 'chr1', 100, 125 ) y <- trbl_interval( ~chrom, ~start, ~end, 'chr1', 25, 50, 'chr1', 140, 175 ) bed_glyph(bed_closest(x, y))
x <- trbl_interval( ~chrom, ~start, ~end, "chr1", 500, 600, "chr2", 5000, 6000 ) y <- trbl_interval( ~chrom, ~start, ~end, "chr1", 100, 200, "chr1", 150, 200, "chr1", 550, 580, "chr2", 7000, 8500 ) bed_closest(x, y)
#> # A tibble: 4 x 7 #> chrom start.x end.x start.y end.y .overlap .dist #> <chr> <dbl> <dbl> <dbl> <dbl> <int> <int> #> 1 chr1 500 600 550 580 30 0 #> 2 chr1 500 600 100 200 0 -301 #> 3 chr1 500 600 150 200 0 -301 #> 4 chr2 5000 6000 7000 8500 0 1001
bed_closest(x, y, overlap = FALSE)
#> # A tibble: 3 x 6 #> chrom start.x end.x start.y end.y .dist #> <chr> <dbl> <dbl> <dbl> <dbl> <int> #> 1 chr1 500 600 100 200 -301 #> 2 chr1 500 600 150 200 -301 #> 3 chr2 5000 6000 7000 8500 1001
# Report distance based on strand x <- trbl_interval( ~chrom, ~start, ~end, ~name, ~score, ~strand, "chr1", 10, 20, "a", 1, "-" ) y <- trbl_interval( ~chrom, ~start, ~end, ~name, ~score, ~strand, "chr1", 8, 9, "b", 1, "+", "chr1", 21, 22, "b", 1, "-" ) res <- bed_closest(x, y) # convert distance based on strand res$.dist_strand <- ifelse(res$strand.x == "+", res$.dist, -(res$.dist)) res
#> # A tibble: 2 x 14 #> chrom start.x end.x name.x score.x strand.x start.y end.y name.y score.y #> <chr> <dbl> <dbl> <chr> <dbl> <chr> <dbl> <dbl> <chr> <dbl> #> 1 chr1 10 20 a 1 - 8 9 b 1 #> 2 chr1 10 20 a 1 - 21 22 b 1 #> # ... with 4 more variables: strand.y <chr>, .overlap <int>, .dist <int>, #> # .dist_strand <int>
# report absolute distances res$.abs_dist <- abs(res$.dist) res
#> # A tibble: 2 x 15 #> chrom start.x end.x name.x score.x strand.x start.y end.y name.y score.y #> <chr> <dbl> <dbl> <chr> <dbl> <chr> <dbl> <dbl> <chr> <dbl> #> 1 chr1 10 20 a 1 - 8 9 b 1 #> 2 chr1 10 20 a 1 - 21 22 b 1 #> # ... with 5 more variables: strand.y <chr>, .overlap <int>, .dist <int>, #> # .dist_strand <int>, .abs_dist <int>