From 699633f28f0722b99dbb3abf58fce3a60edd80b2 Mon Sep 17 00:00:00 2001 From: kriemo Date: Thu, 4 Apr 2024 17:11:11 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20rnabioco?= =?UTF-8?q?/valr@ad01d5e724af15ee75f032f0ab50125a7ae524a6=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dev/articles/interval-stats.html | 36 +++++++++--------- .../figure-html/ecfs-1.png | Bin 75843 -> 76483 bytes .../figure-html/pvalue_viz-1.png | Bin 32819 -> 32913 bytes dev/pkgdown.yml | 2 +- dev/search.json | 2 +- 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/dev/articles/interval-stats.html b/dev/articles/interval-stats.html index ad06a23d..52ef0401 100644 --- a/dev/articles/interval-stats.html +++ b/dev/articles/interval-stats.html @@ -224,21 +224,21 @@

Distance metrics na.omit() res -#> # A tibble: 16,894 × 5 -#> # Groups: name, stat [1,916] -#> name stat .id obs shuf -#> <chr> <chr> <int> <dbl> <dbl> -#> 1 (A)n reldist 1 0.363 0.141 -#> 2 (A)n reldist 2 0.429 0.483 -#> 3 (A)n reldist 3 0.246 0.416 -#> 4 (A)n reldist 4 0.478 0.475 -#> 5 (A)n reldist 5 0.260 0.290 -#> 6 (A)n reldist 6 0.286 0.186 -#> 7 (A)n reldist 7 0.498 0.214 -#> 8 (A)n reldist 8 0.237 0.245 -#> 9 (A)n reldist 9 0.314 0.483 -#> 10 (A)n reldist 10 0.149 0.410 -#> # ℹ 16,884 more rows +#> # A tibble: 16,712 × 5 +#> # Groups: name, stat [1,908] +#> name stat .id obs shuf +#> <chr> <chr> <int> <dbl> <dbl> +#> 1 (A)n reldist 1 0.363 0.275 +#> 2 (A)n reldist 2 0.429 0.0395 +#> 3 (A)n reldist 3 0.246 0.151 +#> 4 (A)n reldist 4 0.478 0.292 +#> 5 (A)n reldist 5 0.260 0.431 +#> 6 (A)n reldist 6 0.286 0.257 +#> 7 (A)n reldist 7 0.498 0.310 +#> 8 (A)n reldist 8 0.237 0.213 +#> 9 (A)n reldist 9 0.314 0.104 +#> 10 (A)n reldist 10 0.149 0.433 +#> # ℹ 16,702 more rows

Now that the data are formatted, we can use the non-parametric ks.test() to determine whether there are significant differences between the observed and shuffled data for each group. @@ -291,7 +291,7 @@

Distance metrics left_join(res_gather, by = c("name", "stat")) #> Warning in left_join(signif, res_gather, by = c("name", "stat")): Detected an unexpected many-to-many relationship between `x` and `y`. #> Row 1 of `x` matches multiple rows in `y`. -#> Row 29251 of `y` matches multiple rows in `x`. +#> Row 28931 of `y` matches multiple rows in `x`. #> If a many-to-many relationship is expected, set `relationship = #> "many-to-many"` to silence this warning. @@ -420,8 +420,8 @@

Projection test arrange(type) DT::datatable(signif_tests) -
- +
+ diff --git a/dev/articles/interval-stats_files/figure-html/ecfs-1.png b/dev/articles/interval-stats_files/figure-html/ecfs-1.png index 8720e5d3383646ea8736805d39c2ade651d159e9..e4afe4c165a51543f63e98803d63915f496c2716 100644 GIT binary patch literal 76483 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

Rp47nIqSYHOp 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 literal 75843 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 t`9bKs$r!UU)PHt(_0#|Vxz1W{z=SPv`whDgOWf diff --git a/dev/articles/interval-stats_files/figure-html/pvalue_viz-1.png b/dev/articles/interval-stats_files/figure-html/pvalue_viz-1.png index 5edf852c20b61cb2d62ab2d5438b516b58090e43..a90c704306acc85f0ea68528e0363c205019dbe9 100644 GIT binary patch literal 32913 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 A_W%F@ diff --git a/dev/pkgdown.yml b/dev/pkgdown.yml index c8c8caf1..3c14d8d2 100644 --- a/dev/pkgdown.yml +++ b/dev/pkgdown.yml @@ -4,7 +4,7 @@ pkgdown_sha: ~ articles: interval-stats: interval-stats.html valr: valr.html -last_built: 2024-04-04T14:55Z +last_built: 2024-04-04T17:08Z urls: reference: https://rnabioco.github.io/valr/reference article: https://rnabioco.github.io/valr/articles diff --git a/dev/search.json b/dev/search.json index 75ba8c61..d24c21a4 100644 --- a/dev/search.json +++ b/dev/search.json @@ -1 +1 @@ -[{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"members, contributors, leaders pledge make participation community harassment-free experience everyone, regardless age, body size, visible invisible disability, ethnicity, sex characteristics, gender identity expression, level experience, education, socio-economic status, nationality, personal appearance, race, religion, sexual identity orientation. pledge act interact ways contribute open, welcoming, diverse, inclusive, healthy community.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behavior contributes positive environment community include: Demonstrating empathy kindness toward people respectful differing opinions, viewpoints, experiences Giving gracefully accepting constructive feedback Accepting responsibility apologizing affected mistakes, learning experience Focusing best just us individuals, overall community Examples unacceptable behavior include: use sexualized language imagery, sexual attention advances kind Trolling, insulting derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical email address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"https://rnabioco.github.io/valr/dev/CODE_OF_CONDUCT.html","id":"enforcement-responsibilities","dir":"","previous_headings":"","what":"Enforcement Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Community leaders responsible clarifying enforcing standards acceptable behavior take appropriate fair corrective action response behavior deem inappropriate, threatening, offensive, harmful. Community leaders right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, communicate reasons moderation decisions appropriate.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within community spaces, also applies individual officially representing community public spaces. Examples representing community include using official e-mail address, posting via official social media account, acting appointed representative online offline event.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported community leaders responsible enforcement [INSERT CONTACT METHOD]. complaints reviewed investigated promptly fairly. community leaders obligated respect privacy security reporter incident.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CODE_OF_CONDUCT.html","id":"enforcement-guidelines","dir":"","previous_headings":"","what":"Enforcement Guidelines","title":"Contributor Covenant Code of Conduct","text":"Community leaders follow Community Impact Guidelines determining consequences action deem violation Code Conduct:","code":""},{"path":"https://rnabioco.github.io/valr/dev/CODE_OF_CONDUCT.html","id":"id_1-correction","dir":"","previous_headings":"Enforcement Guidelines","what":"1. Correction","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Use inappropriate language behavior deemed unprofessional unwelcome community. Consequence: private, written warning community leaders, providing clarity around nature violation explanation behavior inappropriate. public apology may requested.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CODE_OF_CONDUCT.html","id":"id_2-warning","dir":"","previous_headings":"Enforcement Guidelines","what":"2. Warning","title":"Contributor Covenant Code of Conduct","text":"Community Impact: violation single incident series actions. Consequence: warning consequences continued behavior. interaction people involved, including unsolicited interaction enforcing Code Conduct, specified period time. includes avoiding interactions community spaces well external channels like social media. Violating terms may lead temporary permanent ban.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CODE_OF_CONDUCT.html","id":"id_3-temporary-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"3. Temporary Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: serious violation community standards, including sustained inappropriate behavior. Consequence: temporary ban sort interaction public communication community specified period time. public private interaction people involved, including unsolicited interaction enforcing Code Conduct, allowed period. Violating terms may lead permanent ban.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CODE_OF_CONDUCT.html","id":"id_4-permanent-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"4. Permanent Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Demonstrating pattern violation community standards, including sustained inappropriate behavior, harassment individual, aggression toward disparagement classes individuals. Consequence: permanent ban sort public interaction within community.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 2.0, available https://www.contributor-covenant.org/version/2/0/ code_of_conduct.html. Community Impact Guidelines inspired Mozilla’s code conduct enforcement ladder. answers common questions code conduct, see FAQ https://www.contributor-covenant.org/faq. Translations available https:// www.contributor-covenant.org/translations.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CONTRIBUTING.html","id":null,"dir":"","previous_headings":"","what":"Contributing to valr","title":"Contributing to valr","text":"outlines propose change valr. detailed info contributing , tidyverse packages, please see development contributing guide.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CONTRIBUTING.html","id":"fixing-typos","dir":"","previous_headings":"","what":"Fixing typos","title":"Contributing to valr","text":"can fix typos, spelling mistakes, grammatical errors documentation directly using GitHub web interface, long changes made source file. generally means ’ll need edit roxygen2 comments .R, .Rd file. can find .R file generates .Rd reading comment first line.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CONTRIBUTING.html","id":"bigger-changes","dir":"","previous_headings":"","what":"Bigger changes","title":"Contributing to valr","text":"want make bigger change, ’s good idea first file issue make sure someone team agrees ’s needed. ’ve found bug, please file issue illustrates bug minimal reprex (also help write unit test, needed).","code":""},{"path":"https://rnabioco.github.io/valr/dev/CONTRIBUTING.html","id":"pull-request-process","dir":"","previous_headings":"Bigger changes","what":"Pull request process","title":"Contributing to valr","text":"Fork package clone onto computer. haven’t done , recommend using usethis::create_from_github(\"rnabioco/valr\", fork = TRUE). Install development dependences devtools::install_dev_deps(), make sure package passes R CMD check running devtools::check(). R CMD check doesn’t pass cleanly, ’s good idea ask help continuing. Create Git branch pull request (PR). recommend using usethis::pr_init(\"brief-description--change\"). Make changes, commit git, create PR running usethis::pr_push(), following prompts browser. title PR briefly describe change. body PR contain Fixes #issue-number. user-facing changes, add bullet top NEWS.md (.e. just first header). Follow style described https://style.tidyverse.org/news.html.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CONTRIBUTING.html","id":"code-style","dir":"","previous_headings":"Bigger changes","what":"Code style","title":"Contributing to valr","text":"New code follow tidyverse style guide. can use styler package apply styles, please don’t restyle code nothing PR. use roxygen2, Markdown syntax, documentation. use testthat unit tests. Contributions test cases included easier accept.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CONTRIBUTING.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"Contributing to valr","text":"Please note valr project released Contributor Code Conduct. contributing project agree abide terms.","code":""},{"path":"https://rnabioco.github.io/valr/dev/LICENSE.html","id":null,"dir":"","previous_headings":"","what":"MIT License","title":"MIT License","text":"Copyright (c) 2016-2018 Jay R Hesselberth Kent Riemondy Permission hereby granted, free charge, person obtaining copy software associated documentation files (“Software”), deal Software without restriction, including without limitation rights use, copy, modify, merge, publish, distribute, sublicense, /sell copies Software, permit persons Software furnished , subject following conditions: copyright notice permission notice shall included copies substantial portions Software. SOFTWARE PROVIDED “”, WITHOUT WARRANTY KIND, EXPRESS IMPLIED, INCLUDING LIMITED WARRANTIES MERCHANTABILITY, FITNESS PARTICULAR PURPOSE NONINFRINGEMENT. EVENT SHALL AUTHORS COPYRIGHT HOLDERS LIABLE CLAIM, DAMAGES LIABILITY, WHETHER ACTION CONTRACT, TORT OTHERWISE, ARISING , CONNECTION SOFTWARE USE DEALINGS SOFTWARE.","code":""},{"path":"https://rnabioco.github.io/valr/dev/articles/interval-stats.html","id":"overview","dir":"Articles","previous_headings":"","what":"Overview","title":"Interval statistics","text":"valr includes several functions exploring statistical relationships sets intervals. Calculate significance overlaps sets intervals bed_fisher() bed_projection(). Quantify relative absolute distances sets intervals bed_reldist() bed_absdist(). Quantify extent overlap sets intervals bed_jaccard(). vignette explore relationship transcription start sites repetitive elements human genome.","code":"library(valr) library(dplyr) library(ggplot2) library(cowplot) library(tidyr) # load repeats and genes. Data in the valr package is restricted to chr22; the entire # files can be downloaded from UCSC. rpts <- read_bed(valr_example(\"hg19.rmsk.chr22.bed.gz\")) genes <- read_bed12(valr_example(\"hg19.refGene.chr22.bed.gz\")) # load chrom sizes genome <- read_genome(valr_example(\"hg19.chrom.sizes.gz\")) # create 1 bp intervals representing transcription start sites tss <- create_tss(genes) tss #> # A tibble: 1,267 × 6 #> chrom start end name score strand #> #> 1 chr22 16193008 16193009 NR_122113 0 - #> 2 chr22 16157078 16157079 NR_133911 0 + #> 3 chr22 16162065 16162066 NR_073459 0 + #> 4 chr22 16162065 16162066 NR_073460 0 + #> 5 chr22 16231288 16231289 NR_132385 0 - #> 6 chr22 16287936 16287937 NM_001136213 0 - #> 7 chr22 16274608 16274609 NR_046571 0 + #> 8 chr22 16449803 16449804 NM_001005239 0 - #> 9 chr22 17073699 17073700 NM_014406 0 - #> 10 chr22 17082800 17082801 NR_001591 0 + #> # ℹ 1,257 more rows"},{"path":"https://rnabioco.github.io/valr/dev/articles/interval-stats.html","id":"distance-metrics","dir":"Articles","previous_headings":"","what":"Distance metrics","title":"Interval statistics","text":"First define function takes x y intervals computes distance statistics (using bed_reldist() bed_absdist()) specified groups. value statistic assigned .value column. use distance_stats() function apply bed_absdist() function group data. done set shuffled group data. bed_shuffle() used shuffle coordinates repeats within chromosome (.e., coordinates change, chromosome stays .) Now can bind observed shuffled data together, tidying put data format appropriate statistical test. involves: unnest()ing data frames creating groups repeat (name), stat (reldist absdist) type (obs shf) adding unique surrogate row numbers group using tidyr::pivot_wider() create two new obs shuf columns removing rows NA values. Now data formatted, can use non-parametric ks.test() determine whether significant differences observed shuffled data group. broom::tidy() used reformat results test tibble, results test pivoted type column test type. Histgrams different stats help visualize distribution p.values. can also assess false discovery rates (q.values) using p.adjust(). Finally can visualize results using stat_ecdf().","code":"distance_stats <- function(x, y, genome, group_var, type = NA) { group_by(x, !!rlang::sym(group_var)) |> do( reldist = bed_reldist(., y, detail = TRUE) |> select(.value = .reldist), absdist = bed_absdist(., y, genome) |> select(.value = .absdist) ) |> tidyr::pivot_longer( cols = -name, names_to = \"stat\", values_to = \"value\" ) |> mutate(type = type) } obs_stats <- distance_stats(rpts, tss, genome, \"name\", \"obs\") obs_stats #> # A tibble: 2,106 × 4 #> name stat value type #> #> 1 (A)n reldist obs #> 2 (A)n absdist obs #> 3 (AAAAACA)n reldist obs #> 4 (AAAAACA)n absdist obs #> 5 (AAAAC)n reldist obs #> 6 (AAAAC)n absdist obs #> 7 (AAAAG)n reldist obs #> 8 (AAAAG)n absdist obs #> 9 (AAAAT)n reldist obs #> 10 (AAAAT)n absdist obs #> # ℹ 2,096 more rows shfs <- bed_shuffle(rpts, genome, within = TRUE) shf_stats <- distance_stats(shfs, tss, genome, \"name\", \"shuf\") res <- bind_rows(obs_stats, shf_stats) |> tidyr::unnest(value) |> group_by(name, stat, type) |> mutate(.id = row_number()) |> tidyr::pivot_wider( names_from = \"type\", values_from = \".value\" ) |> na.omit() res #> # A tibble: 16,894 × 5 #> # Groups: name, stat [1,916] #> name stat .id obs shuf #> #> 1 (A)n reldist 1 0.363 0.141 #> 2 (A)n reldist 2 0.429 0.483 #> 3 (A)n reldist 3 0.246 0.416 #> 4 (A)n reldist 4 0.478 0.475 #> 5 (A)n reldist 5 0.260 0.290 #> 6 (A)n reldist 6 0.286 0.186 #> 7 (A)n reldist 7 0.498 0.214 #> 8 (A)n reldist 8 0.237 0.245 #> 9 (A)n reldist 9 0.314 0.483 #> 10 (A)n reldist 10 0.149 0.410 #> # ℹ 16,884 more rows library(broom) pvals <- res |> do( twosided = tidy(ks.test(.$obs, .$shuf)), less = tidy(ks.test(.$obs, .$shuf, alternative = \"less\")), greater = tidy(ks.test(.$obs, .$shuf, alternative = \"greater\")) ) |> tidyr::pivot_longer(cols = -c(name, stat), names_to = \"alt\", values_to = \"type\") |> unnest(type) |> select(name:p.value) |> arrange(p.value) ggplot(pvals, aes(p.value)) + geom_histogram(binwidth = 0.05) + facet_grid(stat ~ alt) + theme_cowplot() pvals <- group_by(pvals, stat, alt) |> mutate(q.value = p.adjust(p.value)) |> ungroup() |> arrange(q.value) res_gather <- tidyr::pivot_longer(res, cols = -c(name, stat, .id), names_to = \"type\", values_to = \"value\" ) signif <- head(pvals, 5) res_signif <- signif |> left_join(res_gather, by = c(\"name\", \"stat\")) #> Warning in left_join(signif, res_gather, by = c(\"name\", \"stat\")): Detected an unexpected many-to-many relationship between `x` and `y`. #> ℹ Row 1 of `x` matches multiple rows in `y`. #> ℹ Row 29251 of `y` matches multiple rows in `x`. #> ℹ If a many-to-many relationship is expected, set `relationship = #> \"many-to-many\"` to silence this warning. ggplot(res_signif, aes(x = value, color = type)) + stat_ecdf() + facet_grid(stat ~ name) + theme_cowplot() + scale_x_log10() + scale_color_brewer(palette = \"Set1\")"},{"path":"https://rnabioco.github.io/valr/dev/articles/interval-stats.html","id":"projection-test","dir":"Articles","previous_headings":"","what":"Projection test","title":"Interval statistics","text":"bed_projection() statistical approach assess relationship two intervals based binomial distribution. , examine distribution repetitive elements within promoters coding non-coding genes. First ’ll extract 5 kb regions upstream transcription start sites represent promoter regions coding non-coding genes. Next ’ll apply bed_projection() test repeat class coding non-coding regions. projection test two-tailed statistical test. significant p-value indicates either enrichment depletion query intervals compared reference interval sets. value lower_tail = TRUE column indicates query intervals depleted, whereas lower_tail = FALSE indicates query intervals enriched.","code":"# create intervals 5kb upstream of tss representing promoters promoters <- bed_flank(genes, genome, left = 5000, strand = TRUE) |> mutate(name = ifelse(grepl(\"NR_\", name), \"non-coding\", \"coding\")) |> select(chrom:strand) # select coding and non-coding promoters promoters_coding <- filter(promoters, name == \"coding\") promoters_ncoding <- filter(promoters, name == \"non-coding\") promoters_coding #> # A tibble: 973 × 6 #> chrom start end name score strand #> #> 1 chr22 16287937 16292937 coding 0 - #> 2 chr22 16449804 16454804 coding 0 - #> 3 chr22 17073700 17078700 coding 0 - #> 4 chr22 17302589 17307589 coding 0 - #> 5 chr22 17302589 17307589 coding 0 - #> 6 chr22 17489112 17494112 coding 0 - #> 7 chr22 17560848 17565848 coding 0 + #> 8 chr22 17560848 17565848 coding 0 + #> 9 chr22 17602213 17607213 coding 0 - #> 10 chr22 17602257 17607257 coding 0 - #> # ℹ 963 more rows promoters_ncoding #> # A tibble: 294 × 6 #> chrom start end name score strand #> #> 1 chr22 16152078 16157078 non-coding 0 + #> 2 chr22 16157065 16162065 non-coding 0 + #> 3 chr22 16157065 16162065 non-coding 0 + #> 4 chr22 16193009 16198009 non-coding 0 - #> 5 chr22 16231289 16236289 non-coding 0 - #> 6 chr22 16269608 16274608 non-coding 0 + #> 7 chr22 17077800 17082800 non-coding 0 + #> 8 chr22 17156430 17161430 non-coding 0 - #> 9 chr22 17229328 17234328 non-coding 0 - #> 10 chr22 17303363 17308363 non-coding 0 + #> # ℹ 284 more rows # function to apply bed_projection to groups projection_stats <- function(x, y, genome, group_var, type = NA) { group_by(x, !!rlang::sym(group_var)) |> do( n_repeats = nrow(.), projection = bed_projection(., y, genome) ) |> mutate(type = type) } pvals_coding <- projection_stats(rpts, promoters_coding, genome, \"name\", \"coding\") pvals_ncoding <- projection_stats(rpts, promoters_ncoding, genome, \"name\", \"non_coding\") pvals <- bind_rows(pvals_ncoding, pvals_coding) |> ungroup() |> tidyr::unnest(cols = c(n_repeats, projection)) |> select(-chrom) # filter for repeat classes with at least 10 intervals pvals <- filter( pvals, n_repeats > 10, obs_exp_ratio != 0 ) # adjust pvalues pvals <- mutate(pvals, q.value = p.adjust(p.value)) pvals #> # A tibble: 179 × 7 #> name n_repeats p.value obs_exp_ratio lower_tail type q.value #> #> 1 (A)n 28 0.00353 4.72 FALSE non_coding 0.558 #> 2 (AT)n 48 0.298 0.917 FALSE non_coding 1 #> 3 (CA)n 31 0.156 1.42 FALSE non_coding 1 #> 4 (GT)n 42 0.247 1.05 FALSE non_coding 1 #> 5 (T)n 61 0.405 0.721 FALSE non_coding 1 #> 6 (TG)n 40 0.0622 2.20 FALSE non_coding 1 #> 7 A-rich 54 0.348 0.815 FALSE non_coding 1 #> 8 Alu 15 0.0446 2.93 FALSE non_coding 1 #> 9 AluJb 271 0.0225 1.79 FALSE non_coding 1 #> 10 AluJo 208 0.0216 1.90 FALSE non_coding 1 #> # ℹ 169 more rows library(DT) # find and show top 5 most significant repeats signif_tests <- pvals |> arrange(q.value) |> group_by(type) |> top_n(-5, q.value) |> arrange(type) DT::datatable(signif_tests)"},{"path":"https://rnabioco.github.io/valr/dev/articles/valr.html","id":"familiar-tools-natively-in-r","dir":"Articles","previous_headings":"","what":"Familiar tools, natively in R","title":"valr overview","text":"functions valr similar names BEDtools counterparts, familiar users coming BEDtools suite. Similar pybedtools, valr terse syntax:","code":"library(valr) library(dplyr) snps <- read_bed(valr_example(\"hg19.snps147.chr22.bed.gz\")) genes <- read_bed(valr_example(\"genes.hg19.chr22.bed.gz\")) # find snps in intergenic regions intergenic <- bed_subtract(snps, genes) # distance from intergenic snps to nearest gene nearby <- bed_closest(intergenic, genes) nearby |> select(starts_with(\"name\"), .overlap, .dist) |> filter(abs(.dist) < 1000) #> # A tibble: 285 × 4 #> name.x name.y .overlap .dist #> #> 1 rs2261631 P704P 0 -268 #> 2 rs570770556 POTEH 0 -913 #> 3 rs538163832 POTEH 0 -953 #> 4 rs9606135 TPTEP1 0 -422 #> 5 rs11912392 ANKRD62P1-PARP4P3 0 105 #> 6 rs8136454 BC038197 0 356 #> 7 rs5992556 XKR3 0 -456 #> 8 rs114101676 GAB4 0 474 #> 9 rs62236167 CECR7 0 262 #> 10 rs5747023 CECR1 0 -387 #> # ℹ 275 more rows"},{"path":"https://rnabioco.github.io/valr/dev/articles/valr.html","id":"input-data","dir":"Articles","previous_headings":"","what":"Input data","title":"valr overview","text":"valr assigns common column names facilitate comparisons tbls. tbls chrom, start, end columns, tbls multi-column formats additional pre-determined column names. See read_bed() documentation details. valr can also operate BED-like data.frames already constructed R, provided columns named chrom, start end present. New tbls can also constructed either tibbles base R data.frames.","code":"bed_file <- valr_example(\"3fields.bed.gz\") read_bed(bed_file) # accepts filepaths or URLs #> # A tibble: 10 × 3 #> chrom start end #> #> 1 chr1 11873 14409 #> 2 chr1 14361 19759 #> 3 chr1 14406 29370 #> 4 chr1 34610 36081 #> 5 chr1 69090 70008 #> 6 chr1 134772 140566 #> 7 chr1 321083 321115 #> 8 chr1 321145 321207 #> 9 chr1 322036 326938 #> 10 chr1 327545 328439 bed <- tribble( ~chrom, ~start, ~end, \"chr1\", 1657492, 2657492, \"chr2\", 2501324, 3094650 ) bed #> # A tibble: 2 × 3 #> chrom start end #> #> 1 chr1 1657492 2657492 #> 2 chr2 2501324 3094650"},{"path":"https://rnabioco.github.io/valr/dev/articles/valr.html","id":"interval-coordinates","dir":"Articles","previous_headings":"","what":"Interval coordinates","title":"valr overview","text":"valr adheres BED format specifies start position interval zero based end position one-based. first position chromosome 0. end position chromosome one position passed last base, included interval. example:","code":"# a chromosome 100 basepairs in length chrom <- tribble( ~chrom, ~start, ~end, \"chr1\", 0, 100 ) chrom #> # A tibble: 1 × 3 #> chrom start end #> #> 1 chr1 0 100 # single base-pair intervals bases <- tribble( ~chrom, ~start, ~end, \"chr1\", 0, 1, # first base of chromosome \"chr1\", 1, 2, # second base of chromosome \"chr1\", 99, 100 # last base of chromosome ) bases #> # A tibble: 3 × 3 #> chrom start end #> #> 1 chr1 0 1 #> 2 chr1 1 2 #> 3 chr1 99 100"},{"path":"https://rnabioco.github.io/valr/dev/articles/valr.html","id":"remote-databases","dir":"Articles","previous_headings":"","what":"Remote databases","title":"valr overview","text":"Remote databases can accessed db_ucsc() (access UCSC Browser) db_ensembl() (access Ensembl databases).","code":"# access the `refGene` tbl on the `hg38` assembly. if (require(RMariaDB)) { ucsc <- db_ucsc(\"hg38\") tbl(ucsc, \"refGene\") }"},{"path":"https://rnabioco.github.io/valr/dev/articles/valr.html","id":"visual-documentation","dir":"Articles","previous_headings":"","what":"Visual documentation","title":"valr overview","text":"bed_glyph() tool illustrates results operations valr, similar found BEDtools documentation. glyph shows result intersecting x y intervals bed_intersect(): glyph illustrates bed_merge():","code":"x <- tribble( ~chrom, ~start, ~end, \"chr1\", 25, 50, \"chr1\", 100, 125 ) y <- tribble( ~chrom, ~start, ~end, \"chr1\", 30, 75 ) bed_glyph(bed_intersect(x, y)) x <- tribble( ~chrom, ~start, ~end, \"chr1\", 1, 50, \"chr1\", 10, 75, \"chr1\", 100, 120 ) bed_glyph(bed_merge(x))"},{"path":"https://rnabioco.github.io/valr/dev/articles/valr.html","id":"grouping-data","dir":"Articles","previous_headings":"","what":"Grouping data","title":"valr overview","text":"group_by function dplyr can used perform functions subsets single multiple data_frames. Functions valr leverage grouping enable variety comparisons. example, intervals can grouped strand perform comparisons among intervals strand. Comparisons intervals opposite strands done using flip_strands() function: single set (e.g. bed_merge()) multi set operations respect groupings input intervals.","code":"x <- tribble( ~chrom, ~start, ~end, ~strand, \"chr1\", 1, 100, \"+\", \"chr1\", 50, 150, \"+\", \"chr2\", 100, 200, \"-\" ) y <- tribble( ~chrom, ~start, ~end, ~strand, \"chr1\", 50, 125, \"+\", \"chr1\", 50, 150, \"-\", \"chr2\", 50, 150, \"+\" ) # intersect tbls by strand x <- group_by(x, strand) y <- group_by(y, strand) bed_intersect(x, y) #> # A tibble: 2 × 8 #> chrom start.x end.x strand.x start.y end.y strand.y .overlap #> #> 1 chr1 1 100 + 50 125 + 50 #> 2 chr1 50 150 + 50 125 + 75 x <- group_by(x, strand) y <- flip_strands(y) y <- group_by(y, strand) bed_intersect(x, y) #> # A tibble: 3 × 8 #> chrom start.x end.x strand.x start.y end.y strand.y .overlap #> #> 1 chr1 1 100 + 50 150 + 50 #> 2 chr1 50 150 + 50 150 + 100 #> 3 chr2 100 200 - 50 150 - 50"},{"path":"https://rnabioco.github.io/valr/dev/articles/valr.html","id":"column-specification","dir":"Articles","previous_headings":"","what":"Column specification","title":"valr overview","text":"Columns BEDtools referred position: valr, columns referred name can used multiple name/value expressions summaries.","code":"# calculate the mean of column 6 for intervals in `b` that overlap with `a` bedtools map -a a.bed -b b.bed -c 6 -o mean # calculate the mean and variance for a `value` column bed_map(a, b, .mean = mean(value), .var = var(value)) # report concatenated and max values for merged intervals bed_merge(a, .concat = concat(value), .max = max(value))"},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/articles/valr.html","id":"meta-analysis","dir":"Articles","previous_headings":"Getting started","what":"Meta-analysis","title":"valr overview","text":"demonstration illustrates use valr tools perform “meta-analysis” signals relative genomic features. analyze distribution histone marks surrounding transcription start sites. First load libraries relevant data. generate 1 bp intervals represent transcription start sites (TSSs). focus + strand genes, - genes easily accommodated filtering using bed_makewindows() reversed window numbers. Now use .win_id group bed_map() calculate sum mapping y signals onto intervals x. data regrouped .win_id summary mean sd values calculated. Finally, summary statistics used construct plot illustrates histone density surrounding TSSs.","code":"# `valr_example()` identifies the path of example files bedfile <- valr_example(\"genes.hg19.chr22.bed.gz\") genomefile <- valr_example(\"hg19.chrom.sizes.gz\") bgfile <- valr_example(\"hela.h3k4.chip.bg.gz\") genes <- read_bed(bedfile) genome <- read_genome(genomefile) y <- read_bedgraph(bgfile) # generate 1 bp TSS intervals, `+` strand only tss <- genes |> filter(strand == \"+\") |> mutate(end = start + 1) # 1000 bp up and downstream region_size <- 1000 # 50 bp windows win_size <- 50 # add slop to the TSS, break into windows and add a group x <- tss |> bed_slop(genome, both = region_size) |> bed_makewindows(win_size) x #> # A tibble: 13,530 × 7 #> chrom start end name score strand .win_id #> #> 1 chr22 16161065 16161115 LINC00516 3 + 1 #> 2 chr22 16161115 16161165 LINC00516 3 + 2 #> 3 chr22 16161165 16161215 LINC00516 3 + 3 #> 4 chr22 16161215 16161265 LINC00516 3 + 4 #> 5 chr22 16161265 16161315 LINC00516 3 + 5 #> 6 chr22 16161315 16161365 LINC00516 3 + 6 #> 7 chr22 16161365 16161415 LINC00516 3 + 7 #> 8 chr22 16161415 16161465 LINC00516 3 + 8 #> 9 chr22 16161465 16161515 LINC00516 3 + 9 #> 10 chr22 16161515 16161565 LINC00516 3 + 10 #> # ℹ 13,520 more rows # map signals to TSS regions and calculate summary statistics. res <- bed_map(x, y, win_sum = sum(value, na.rm = TRUE)) |> group_by(.win_id) |> summarize( win_mean = mean(win_sum, na.rm = TRUE), win_sd = sd(win_sum, na.rm = TRUE) ) res #> # A tibble: 41 × 3 #> .win_id win_mean win_sd #> #> 1 1 101. 85.8 #> 2 2 111. 81.1 #> 3 3 123. 99.1 #> 4 4 116. 96.3 #> 5 5 116. 102. #> 6 6 125. 95.1 #> 7 7 123. 94.4 #> 8 8 128. 91.5 #> 9 9 130. 95.7 #> 10 10 130. 88.8 #> # ℹ 31 more rows x_labels <- seq( -region_size, region_size, by = win_size * 5 ) x_breaks <- seq(1, 41, by = 5) sd_limits <- aes( ymax = win_mean + win_sd, ymin = win_mean - win_sd ) ggplot( res, aes( x = .win_id, y = win_mean ) ) + geom_point() + geom_pointrange(sd_limits) + scale_x_continuous( labels = x_labels, breaks = x_breaks ) + labs( x = \"Position (bp from TSS)\", y = \"Signal\", title = \"Human H3K4me3 signal near transcription start sites\" ) + theme_classic()"},{"path":"https://rnabioco.github.io/valr/dev/articles/valr.html","id":"related-work","dir":"Articles","previous_headings":"","what":"Related work","title":"valr overview","text":"Command-line tools BEDtools bedops. Python library pybedtools wraps BEDtools. R packages GenomicRanges, bedr, IRanges GenometriCorr provide similar capability different philosophy.","code":""},{"path":"https://rnabioco.github.io/valr/dev/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Jay Hesselberth. Author. Kent Riemondy. Author, maintainer. . Funder, copyright holder.","code":""},{"path":"https://rnabioco.github.io/valr/dev/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Riemondy KA, Sheridan RM, Gillen , Yu Y, Bennett CG, Hesselberth JR (2017). “valr: Reproducible Genome Interval Arithmetic R.” F1000Research. doi:10.12688/f1000research.11997.1.","code":"@Article{, title = {valr: Reproducible Genome Interval Arithmetic in R}, year = {2017}, author = {Kent A. Riemondy and Ryan M. Sheridan and Austin Gillen and Yinni Yu and Christopher G. Bennett and Jay R. Hesselberth}, journal = {F1000Research}, doi = {10.12688/f1000research.11997.1}, }"},{"path":"https://rnabioco.github.io/valr/dev/index.html","id":"valr-","dir":"","previous_headings":"","what":"Genome Interval Arithmetic","title":"Genome Interval Arithmetic","text":"valr provides tools read manipulate genome intervals signals, similar BEDtools suite.","code":""},{"path":"https://rnabioco.github.io/valr/dev/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"Genome Interval Arithmetic","text":"latest stable version can installed CRAN: latest development version can installed github:","code":"install.packages('valr') # install.packages(\"devtools\") devtools::install_github('rnabioco/valr')"},{"path":"https://rnabioco.github.io/valr/dev/index.html","id":"valr-example","dir":"","previous_headings":"","what":"valr Example","title":"Genome Interval Arithmetic","text":"Functions valr similar names BEDtools counterparts, familiar users coming BEDtools suite. Unlike tools wrap BEDtools write temporary files disk, valr tools run natively memory. Similar pybedtools, valr terse syntax:","code":"library(valr) library(dplyr) snps <- read_bed(valr_example(\"hg19.snps147.chr22.bed.gz\")) genes <- read_bed(valr_example(\"genes.hg19.chr22.bed.gz\")) # find snps in intergenic regions intergenic <- bed_subtract(snps, genes) # find distance from intergenic snps to nearest gene nearby <- bed_closest(intergenic, genes) nearby |> select(starts_with(\"name\"), .overlap, .dist) |> filter(abs(.dist) < 5000) #> # A tibble: 1,047 × 4 #> name.x name.y .overlap .dist #> #> 1 rs530458610 P704P 0 2579 #> 2 rs2261631 P704P 0 -268 #> 3 rs570770556 POTEH 0 -913 #> 4 rs538163832 POTEH 0 -953 #> 5 rs190224195 POTEH 0 -1399 #> 6 rs2379966 DQ571479 0 4750 #> 7 rs142687051 DQ571479 0 3558 #> 8 rs528403095 DQ571479 0 3309 #> 9 rs555126291 DQ571479 0 2745 #> 10 rs5747567 DQ571479 0 -1778 #> # ℹ 1,037 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed12_to_exons.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert BED12 to individual exons in BED6. — bed12_to_exons","title":"Convert BED12 to individual exons in BED6. — bed12_to_exons","text":"conversion BED6 format, score column contains exon number, respect strand (.e., first exon - strand genes larger start end coordinates).","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed12_to_exons.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert BED12 to individual exons in BED6. — bed12_to_exons","text":"","code":"bed12_to_exons(x)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed12_to_exons.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert BED12 to individual exons in BED6. — bed12_to_exons","text":"x ivl_df","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed12_to_exons.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert BED12 to individual exons in BED6. — bed12_to_exons","text":"","code":"x <- read_bed12(valr_example(\"mm9.refGene.bed.gz\")) bed12_to_exons(x) #> # A tibble: 1,683 × 6 #> chrom start end name score strand #> #> 1 chr1 3204562 3207049 NM_001011874 3 - #> 2 chr1 3411782 3411982 NM_001011874 2 - #> 3 chr1 3660632 3661579 NM_001011874 1 - #> 4 chr1 4280926 4283093 NM_001195662 4 - #> 5 chr1 4341990 4342162 NM_001195662 3 - #> 6 chr1 4342282 4342918 NM_001195662 2 - #> 7 chr1 4399250 4399322 NM_001195662 1 - #> 8 chr1 4847774 4848057 NM_001159750 1 + #> 9 chr1 4847774 4848057 NM_011541 1 + #> 10 chr1 4848408 4848584 NM_001159751 1 + #> # ℹ 1,673 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_absdist.html","id":null,"dir":"Reference","previous_headings":"","what":"Compute absolute distances between intervals. — bed_absdist","title":"Compute absolute distances between intervals. — bed_absdist","text":"Computes absolute distance midpoint x interval midpoints closest y interval.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_absdist.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compute absolute distances between intervals. — bed_absdist","text":"","code":"bed_absdist(x, y, genome)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_absdist.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compute absolute distances between intervals. — bed_absdist","text":"x ivl_df y ivl_df genome genome_df","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_absdist.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compute absolute distances between intervals. — bed_absdist","text":"ivl_df .absdist .absdist_scaled columns.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_absdist.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Compute absolute distances between intervals. — bed_absdist","text":"Absolute distances scaled inter-reference gap chromosome follows. Q query points R reference points chromosome, scale distance query point closest reference point inter-reference gap chromosome. x interval matching y chromosome, .absdist NA. $$d_i(x,y) = min_k(|q_i - r_k|)\\frac{R}{Length\\ \\ chromosome}$$ absolute scaled distances reported .absdist .absdist_scaled. Interval statistics can used combination dplyr::group_by() dplyr::() calculate statistics subsets data. See vignette('interval-stats') examples.","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_absdist.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Compute absolute distances between intervals. — bed_absdist","text":"","code":"genome <- read_genome(valr_example(\"hg19.chrom.sizes.gz\")) x <- bed_random(genome, seed = 1010486) y <- bed_random(genome, seed = 9203911) bed_absdist(x, y, genome) #> # A tibble: 1,000,000 × 5 #> chrom start end .absdist .absdist_scaled #> #> 1 chr1 5184 6184 1392 0.448 #> 2 chr1 7663 8663 1087 0.350 #> 3 chr1 9858 10858 1526 0.491 #> 4 chr1 13805 14805 2421 0.779 #> 5 chr1 14081 15081 2697 0.868 #> 6 chr1 16398 17398 1700 0.547 #> 7 chr1 17486 18486 612 0.197 #> 8 chr1 22063 23063 466 0.150 #> 9 chr1 22494 23494 897 0.289 #> 10 chr1 29351 30351 1143 0.368 #> # ℹ 999,990 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_closest.html","id":null,"dir":"Reference","previous_headings":"","what":"Identify closest intervals. — bed_closest","title":"Identify closest intervals. — bed_closest","text":"Identify closest intervals.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_closest.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Identify closest intervals. — bed_closest","text":"","code":"bed_closest(x, y, overlap = TRUE, suffix = c(\".x\", \".y\"))"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_closest.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Identify closest intervals. — bed_closest","text":"x ivl_df y ivl_df overlap report overlapping intervals suffix colname suffixes output","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_closest.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Identify closest intervals. — bed_closest","text":"ivl_df additional columns: .overlap amount overlap overlapping interval. Non-overlapping adjacent intervals overlap 0. .overlap included output overlap = FALSE. .dist distance closest interval. Negative distances denote upstream intervals. Book-ended intervals distance 1.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_closest.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Identify closest intervals. — bed_closest","text":"input tbls grouped chrom default, additional groups can added using dplyr::group_by(). example, grouping strand constrain analyses strand. compare opposing strands across two tbls, strands y tbl can first inverted using flip_strands().","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_closest.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Identify closest intervals. — bed_closest","text":"interval x bed_closest() returns overlapping intervals y closest non-intersecting y interval. Setting overlap = FALSE report closest non-intersecting y intervals, ignoring overlapping y intervals.","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_closest.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Identify closest intervals. — bed_closest","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 100, 125 ) y <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 25, 50, \"chr1\", 140, 175 ) bed_glyph(bed_closest(x, y)) x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 500, 600, \"chr2\", 5000, 6000 ) y <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 100, 200, \"chr1\", 150, 200, \"chr1\", 550, 580, \"chr2\", 7000, 8500 ) bed_closest(x, y) #> # A tibble: 4 × 7 #> chrom start.x end.x start.y end.y .overlap .dist #> #> 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 × 6 #> chrom start.x end.x start.y end.y .dist #> #> 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 <- tibble::tribble( ~chrom, ~start, ~end, ~name, ~score, ~strand, \"chr1\", 10, 20, \"a\", 1, \"-\" ) y <- tibble::tribble( ~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 × 14 #> chrom start.x end.x name.x score.x strand.x start.y end.y name.y score.y #> #> 1 chr1 10 20 a 1 - 21 22 b 1 #> 2 chr1 10 20 a 1 - 8 9 b 1 #> # ℹ 4 more variables: strand.y , .overlap , .dist , #> # .dist_strand # report absolute distances res$.abs_dist <- abs(res$.dist) res #> # A tibble: 2 × 15 #> chrom start.x end.x name.x score.x strand.x start.y end.y name.y score.y #> #> 1 chr1 10 20 a 1 - 21 22 b 1 #> 2 chr1 10 20 a 1 - 8 9 b 1 #> # ℹ 5 more variables: strand.y , .overlap , .dist , #> # .dist_strand , .abs_dist "},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_cluster.html","id":null,"dir":"Reference","previous_headings":"","what":"Cluster neighboring intervals. — bed_cluster","title":"Cluster neighboring intervals. — bed_cluster","text":"output .id column can used downstream grouping operations. Default max_dist = 0 means overlapping book-ended intervals clustered.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_cluster.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Cluster neighboring intervals. — bed_cluster","text":"","code":"bed_cluster(x, max_dist = 0)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_cluster.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Cluster neighboring intervals. — bed_cluster","text":"x ivl_df max_dist maximum distance clustered intervals.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_cluster.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Cluster neighboring intervals. — bed_cluster","text":"ivl_df .id column specifying sets clustered intervals.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_cluster.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Cluster neighboring intervals. — bed_cluster","text":"input tbls grouped chrom default, additional groups can added using dplyr::group_by(). example, grouping strand constrain analyses strand. compare opposing strands across two tbls, strands y tbl can first inverted using flip_strands().","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_cluster.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Cluster neighboring intervals. — bed_cluster","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 100, 200, \"chr1\", 180, 250, \"chr1\", 250, 500, \"chr1\", 501, 1000, \"chr2\", 1, 100, \"chr2\", 150, 200 ) bed_cluster(x) #> # A tibble: 6 × 4 #> chrom start end .id #> #> 1 chr1 100 200 1 #> 2 chr1 180 250 1 #> 3 chr1 250 500 1 #> 4 chr1 501 1000 2 #> 5 chr2 1 100 3 #> 6 chr2 150 200 4 # glyph illustrating clustering of overlapping and book-ended intervals x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 1, 10, \"chr1\", 5, 20, \"chr1\", 30, 40, \"chr1\", 40, 50, \"chr1\", 80, 90 ) bed_glyph(bed_cluster(x), label = \".id\")"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_complement.html","id":null,"dir":"Reference","previous_headings":"","what":"Identify intervals in a genome not covered by a query. — bed_complement","title":"Identify intervals in a genome not covered by a query. — bed_complement","text":"Identify intervals genome covered query.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_complement.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Identify intervals in a genome not covered by a query. — bed_complement","text":"","code":"bed_complement(x, genome)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_complement.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Identify intervals in a genome not covered by a query. — bed_complement","text":"x ivl_df genome ivl_df","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_complement.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Identify intervals in a genome not covered by a query. — bed_complement","text":"ivl_df","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_complement.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Identify intervals in a genome not covered by a query. — bed_complement","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 0, 10, \"chr1\", 75, 100 ) genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 200 ) bed_glyph(bed_complement(x, genome)) genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 500, \"chr2\", 600, \"chr3\", 800 ) x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 100, 300, \"chr1\", 200, 400, \"chr2\", 0, 100, \"chr2\", 200, 400, \"chr3\", 500, 600 ) # intervals not covered by x bed_complement(x, genome) #> # A tibble: 6 × 3 #> chrom start end #> #> 1 chr1 0 100 #> 2 chr1 400 500 #> 3 chr2 100 200 #> 4 chr2 400 600 #> 5 chr3 0 500 #> 6 chr3 600 800"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_coverage.html","id":null,"dir":"Reference","previous_headings":"","what":"Compute coverage of intervals. — bed_coverage","title":"Compute coverage of intervals. — bed_coverage","text":"Compute coverage intervals.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_coverage.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compute coverage of intervals. — bed_coverage","text":"","code":"bed_coverage(x, y, ...)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_coverage.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compute coverage of intervals. — bed_coverage","text":"x ivl_df y ivl_df ... extra arguments (used)","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_coverage.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compute coverage of intervals. — bed_coverage","text":"ivl_df following additional columns: .ints number x intersections .cov per-base coverage x intervals .len total length y intervals covered x intervals .frac .len scaled number y intervals","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_coverage.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Compute coverage of intervals. — bed_coverage","text":"input tbls grouped chrom default, additional groups can added using dplyr::group_by(). example, grouping strand constrain analyses strand. compare opposing strands across two tbls, strands y tbl can first inverted using flip_strands().","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_coverage.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Compute coverage of intervals. — bed_coverage","text":"Book-ended intervals included coverage calculations.","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_coverage.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Compute coverage of intervals. — bed_coverage","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, ~strand, \"chr1\", 100, 500, \"+\", \"chr2\", 200, 400, \"+\", \"chr2\", 300, 500, \"-\", \"chr2\", 800, 900, \"-\" ) y <- tibble::tribble( ~chrom, ~start, ~end, ~value, ~strand, \"chr1\", 150, 400, 100, \"+\", \"chr1\", 500, 550, 100, \"+\", \"chr2\", 230, 430, 200, \"-\", \"chr2\", 350, 430, 300, \"-\" ) bed_coverage(x, y) #> # A tibble: 4 × 8 #> chrom start end strand .ints .cov .len .frac #> #> 1 chr1 100 500 + 2 250 400 0.625 #> 2 chr2 200 400 + 2 170 200 0.85 #> 3 chr2 300 500 - 2 130 200 0.65 #> 4 chr2 800 900 - 0 0 100 0"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_fisher.html","id":null,"dir":"Reference","previous_headings":"","what":"Fisher's test to measure overlap between two sets of intervals. — bed_fisher","title":"Fisher's test to measure overlap between two sets of intervals. — bed_fisher","text":"Calculate Fisher's test number intervals shared unique two sets x y intervals.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_fisher.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fisher's test to measure overlap between two sets of intervals. — bed_fisher","text":"","code":"bed_fisher(x, y, genome)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_fisher.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fisher's test to measure overlap between two sets of intervals. — bed_fisher","text":"x ivl_df y ivl_df genome genome_df","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_fisher.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fisher's test to measure overlap between two sets of intervals. — bed_fisher","text":"ivl_df","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_fisher.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Fisher's test to measure overlap between two sets of intervals. — bed_fisher","text":"Interval statistics can used combination dplyr::group_by() dplyr::() calculate statistics subsets data. See vignette('interval-stats') examples.","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_fisher.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fisher's test to measure overlap between two sets of intervals. — bed_fisher","text":"","code":"genome <- read_genome(valr_example(\"hg19.chrom.sizes.gz\")) x <- bed_random(genome, n = 1e4, seed = 1010486) y <- bed_random(genome, n = 1e4, seed = 9203911) bed_fisher(x, y, genome) #> # A tibble: 1 × 6 #> estimate p.value conf.low conf.high method alternative #> #> 1 0.945 0.707 0.722 1.22 Fisher's Exact Test for… two.sided"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_flank.html","id":null,"dir":"Reference","previous_headings":"","what":"Create flanking intervals from input intervals. — bed_flank","title":"Create flanking intervals from input intervals. — bed_flank","text":"Create flanking intervals input intervals.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_flank.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create flanking intervals from input intervals. — bed_flank","text":"","code":"bed_flank( x, genome, both = 0, left = 0, right = 0, fraction = FALSE, strand = FALSE, trim = FALSE, ... )"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_flank.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create flanking intervals from input intervals. — bed_flank","text":"x ivl_df genome genome_df number bases sizes left number bases left side right number bases right side fraction define flanks based fraction interval length strand define left right based strand trim adjust coordinates --bounds intervals ... extra arguments (used)","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_flank.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create flanking intervals from input intervals. — bed_flank","text":"ivl_df","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_flank.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create flanking intervals from input intervals. — bed_flank","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 25, 50, \"chr1\", 100, 125 ) genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 130 ) bed_glyph(bed_flank(x, genome, both = 20)) x <- tibble::tribble( ~chrom, ~start, ~end, ~name, ~score, ~strand, \"chr1\", 500, 1000, \".\", \".\", \"+\", \"chr1\", 1000, 1500, \".\", \".\", \"-\" ) genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 5000 ) bed_flank(x, genome, left = 100) #> # A tibble: 2 × 6 #> chrom start end name score strand #> #> 1 chr1 400 500 . . + #> 2 chr1 900 1000 . . - bed_flank(x, genome, right = 100) #> # A tibble: 2 × 6 #> chrom start end name score strand #> #> 1 chr1 1000 1100 . . + #> 2 chr1 1500 1600 . . - bed_flank(x, genome, both = 100) #> # A tibble: 4 × 6 #> chrom start end name score strand #> #> 1 chr1 400 500 . . + #> 2 chr1 900 1000 . . - #> 3 chr1 1000 1100 . . + #> 4 chr1 1500 1600 . . - bed_flank(x, genome, both = 0.5, fraction = TRUE) #> # A tibble: 4 × 6 #> chrom start end name score strand #> #> 1 chr1 250 500 . . + #> 2 chr1 750 1000 . . - #> 3 chr1 1000 1250 . . + #> 4 chr1 1500 1750 . . -"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_genomecov.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate coverage across a genome — bed_genomecov","title":"Calculate coverage across a genome — bed_genomecov","text":"function useful calculating interval coverage across entire genome.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_genomecov.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate coverage across a genome — bed_genomecov","text":"","code":"bed_genomecov(x, genome, zero_depth = FALSE)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_genomecov.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate coverage across a genome — bed_genomecov","text":"x ivl_df genome genome_df zero_depth TRUE, report intervals zero depth. Zero depth intervals reported respect groups.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_genomecov.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate coverage across a genome — bed_genomecov","text":"ivl_df additional column: .depth depth interval coverage","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_genomecov.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate coverage across a genome — bed_genomecov","text":"input tbls grouped chrom default, additional groups can added using dplyr::group_by(). example, grouping strand constrain analyses strand. compare opposing strands across two tbls, strands y tbl can first inverted using flip_strands().","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_genomecov.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate coverage across a genome — bed_genomecov","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, ~strand, \"chr1\", 20, 70, \"+\", \"chr1\", 50, 100, \"-\", \"chr1\", 200, 250, \"+\", \"chr1\", 220, 250, \"+\" ) genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 500, \"chr2\", 1000 ) bed_genomecov(x, genome) #> # A tibble: 5 × 4 #> chrom start end .depth #> #> 1 chr1 20 50 1 #> 2 chr1 50 70 2 #> 3 chr1 70 100 1 #> 4 chr1 200 220 1 #> 5 chr1 220 250 2 bed_genomecov(dplyr::group_by(x, strand), genome) #> # A tibble: 4 × 5 #> chrom start end strand .depth #> #> 1 chr1 20 70 + 1 #> 2 chr1 200 220 + 1 #> 3 chr1 220 250 + 2 #> 4 chr1 50 100 - 1 bed_genomecov(dplyr::group_by(x, strand), genome, zero_depth = TRUE) #> # A tibble: 11 × 5 #> chrom start end strand .depth #> #> 1 chr1 0 20 + 0 #> 2 chr1 0 50 - 0 #> 3 chr1 20 70 + 1 #> 4 chr1 50 100 - 1 #> 5 chr1 70 200 + 0 #> 6 chr1 100 500 - 0 #> 7 chr1 200 220 + 1 #> 8 chr1 220 250 + 2 #> 9 chr1 250 500 + 0 #> 10 chr2 0 1000 + 0 #> 11 chr2 0 1000 - 0"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_glyph.html","id":null,"dir":"Reference","previous_headings":"","what":"Create example glyphs for valr functions. — bed_glyph","title":"Create example glyphs for valr functions. — bed_glyph","text":"Used illustrate output valr functions small examples.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_glyph.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create example glyphs for valr functions. — bed_glyph","text":"","code":"bed_glyph(expr, label = NULL)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_glyph.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create example glyphs for valr functions. — bed_glyph","text":"expr expression evaluate label column name use label values. present result call.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_glyph.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create example glyphs for valr functions. — bed_glyph","text":"ggplot2::ggplot()","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_glyph.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create example glyphs for valr functions. — bed_glyph","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 25, 50, \"chr1\", 100, 125 ) y <- tibble::tribble( ~chrom, ~start, ~end, ~value, \"chr1\", 30, 75, 50 ) bed_glyph(bed_intersect(x, y)) x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 30, 75, \"chr1\", 50, 90, \"chr1\", 91, 120 ) bed_glyph(bed_merge(x)) bed_glyph(bed_cluster(x), label = \".id\")"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_intersect.html","id":null,"dir":"Reference","previous_headings":"","what":"Identify intersecting intervals. — bed_intersect","title":"Identify intersecting intervals. — bed_intersect","text":"Report intersecting intervals x y tbls. Book-ended intervals .overlap values 0 output.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_intersect.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Identify intersecting intervals. — bed_intersect","text":"","code":"bed_intersect(x, ..., invert = FALSE, suffix = c(\".x\", \".y\"))"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_intersect.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Identify intersecting intervals. — bed_intersect","text":"x ivl_df ... one (e.g. list ) y ivl_df()s invert report x intervals y suffix colname suffixes output","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_intersect.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Identify intersecting intervals. — bed_intersect","text":"ivl_df original columns x y suffixed .x .y, new .overlap column extent overlap intersecting intervals. multiple y tbls supplied, .source contains variable names associated interval. original columns y suffixed .y output. ... contains named inputs (.e = y, b = z list(= y, b = z)), .source contain supplied names (see examples).","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_intersect.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Identify intersecting intervals. — bed_intersect","text":"input tbls grouped chrom default, additional groups can added using dplyr::group_by(). example, grouping strand constrain analyses strand. compare opposing strands across two tbls, strands y tbl can first inverted using flip_strands().","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_intersect.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Identify intersecting intervals. — bed_intersect","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 25, 50, \"chr1\", 100, 125 ) y <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 30, 75 ) bed_glyph(bed_intersect(x, y)) bed_glyph(bed_intersect(x, y, invert = TRUE)) x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 100, 500, \"chr2\", 200, 400, \"chr2\", 300, 500, \"chr2\", 800, 900 ) y <- tibble::tribble( ~chrom, ~start, ~end, ~value, \"chr1\", 150, 400, 100, \"chr1\", 500, 550, 100, \"chr2\", 230, 430, 200, \"chr2\", 350, 430, 300 ) bed_intersect(x, y) #> # A tibble: 6 × 7 #> chrom start.x end.x start.y end.y value.y .overlap #> #> 1 chr1 100 500 150 400 100 250 #> 2 chr1 100 500 500 550 100 0 #> 3 chr2 200 400 230 430 200 170 #> 4 chr2 200 400 350 430 300 50 #> 5 chr2 300 500 230 430 200 130 #> 6 chr2 300 500 350 430 300 80 bed_intersect(x, y, invert = TRUE) #> # A tibble: 1 × 3 #> chrom start end #> #> 1 chr2 800 900 # start and end of each overlapping interval res <- bed_intersect(x, y) dplyr::mutate(res, start = pmax(start.x, start.y), end = pmin(end.x, end.y) ) #> # A tibble: 6 × 9 #> chrom start.x end.x start.y end.y value.y .overlap start end #> #> 1 chr1 100 500 150 400 100 250 150 400 #> 2 chr1 100 500 500 550 100 0 500 500 #> 3 chr2 200 400 230 430 200 170 230 400 #> 4 chr2 200 400 350 430 300 50 350 400 #> 5 chr2 300 500 230 430 200 130 300 430 #> 6 chr2 300 500 350 430 300 80 350 430 z <- tibble::tribble( ~chrom, ~start, ~end, ~value, \"chr1\", 150, 400, 100, \"chr1\", 500, 550, 100, \"chr2\", 230, 430, 200, \"chr2\", 750, 900, 400 ) bed_intersect(x, y, z) #> # A tibble: 11 × 8 #> chrom start.x end.x start.y end.y value.y .source .overlap #> #> 1 chr1 100 500 150 400 100 y 250 #> 2 chr1 100 500 150 400 100 z 250 #> 3 chr1 100 500 500 550 100 y 0 #> 4 chr1 100 500 500 550 100 z 0 #> 5 chr2 200 400 230 430 200 y 170 #> 6 chr2 200 400 230 430 200 z 170 #> 7 chr2 200 400 350 430 300 y 50 #> 8 chr2 300 500 230 430 200 y 130 #> 9 chr2 300 500 230 430 200 z 130 #> 10 chr2 300 500 350 430 300 y 80 #> 11 chr2 800 900 750 900 400 z 100 bed_intersect(x, exons = y, introns = z) #> # A tibble: 11 × 8 #> chrom start.x end.x start.y end.y value.y .source .overlap #> #> 1 chr1 100 500 150 400 100 exons 250 #> 2 chr1 100 500 150 400 100 introns 250 #> 3 chr1 100 500 500 550 100 exons 0 #> 4 chr1 100 500 500 550 100 introns 0 #> 5 chr2 200 400 230 430 200 exons 170 #> 6 chr2 200 400 230 430 200 introns 170 #> 7 chr2 200 400 350 430 300 exons 50 #> 8 chr2 300 500 230 430 200 exons 130 #> 9 chr2 300 500 230 430 200 introns 130 #> 10 chr2 300 500 350 430 300 exons 80 #> 11 chr2 800 900 750 900 400 introns 100 # a list of tbl_intervals can also be passed bed_intersect(x, list(exons = y, introns = z)) #> # A tibble: 11 × 8 #> chrom start.x end.x start.y end.y value.y .source .overlap #> #> 1 chr1 100 500 150 400 100 exons 250 #> 2 chr1 100 500 150 400 100 introns 250 #> 3 chr1 100 500 500 550 100 exons 0 #> 4 chr1 100 500 500 550 100 introns 0 #> 5 chr2 200 400 230 430 200 exons 170 #> 6 chr2 200 400 230 430 200 introns 170 #> 7 chr2 200 400 350 430 300 exons 50 #> 8 chr2 300 500 230 430 200 exons 130 #> 9 chr2 300 500 230 430 200 introns 130 #> 10 chr2 300 500 350 430 300 exons 80 #> 11 chr2 800 900 750 900 400 introns 100"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_jaccard.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate the Jaccard statistic for two sets of intervals. — bed_jaccard","title":"Calculate the Jaccard statistic for two sets of intervals. — bed_jaccard","text":"Quantifies extent overlap sets intervals terms base-pairs. Groups shared input used calculate statistic subsets data.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_jaccard.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate the Jaccard statistic for two sets of intervals. — bed_jaccard","text":"","code":"bed_jaccard(x, y)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_jaccard.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate the Jaccard statistic for two sets of intervals. — bed_jaccard","text":"x ivl_df y ivl_df","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_jaccard.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate the Jaccard statistic for two sets of intervals. — bed_jaccard","text":"tibble following columns: len_i length intersection base-pairs len_u length union base-pairs jaccard value jaccard statistic n_int number intersecting intervals x y inputs grouped, return value contain one set values per group.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_jaccard.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate the Jaccard statistic for two sets of intervals. — bed_jaccard","text":"Jaccard statistic takes values [0,1] measured : $$ J(x,y) = \\frac{\\mid x \\bigcap y \\mid} {\\mid x \\bigcup y \\mid} = \\frac{\\mid x \\bigcap y \\mid} {\\mid x \\mid + \\mid y \\mid - \\mid x \\bigcap y \\mid} $$ Interval statistics can used combination dplyr::group_by() dplyr::() calculate statistics subsets data. See vignette('interval-stats') examples.","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_jaccard.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate the Jaccard statistic for two sets of intervals. — bed_jaccard","text":"","code":"genome <- read_genome(valr_example(\"hg19.chrom.sizes.gz\")) x <- bed_random(genome, seed = 1010486) y <- bed_random(genome, seed = 9203911) bed_jaccard(x, y) #> # A tibble: 1 × 4 #> len_i len_u jaccard n #> #> 1 236184699 1708774142 0.160 399981 # calculate jaccard per chromosome bed_jaccard( dplyr::group_by(x, chrom), dplyr::group_by(y, chrom) ) #> # A tibble: 25 × 5 #> chrom len_i len_u jaccard n #> #> 1 chr1 18939046 137345996 0.160 32156 #> 2 chr10 10524360 75209830 0.163 17830 #> 3 chr11 10378246 74655177 0.161 17497 #> 4 chr12 10146255 73725046 0.160 17163 #> 5 chr13 8867024 63737541 0.162 14992 #> 6 chr14 8047103 59033144 0.158 13647 #> 7 chr15 7794057 56514322 0.160 13236 #> 8 chr16 6907575 49874077 0.161 11650 #> 9 chr17 6186446 44917522 0.160 10487 #> 10 chr18 6044900 43248877 0.162 10129 #> # ℹ 15 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_makewindows.html","id":null,"dir":"Reference","previous_headings":"","what":"Divide intervals into new sub-intervals (","title":"Divide intervals into new sub-intervals (","text":"Divide intervals new sub-intervals (\"windows\").","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_makewindows.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Divide intervals into new sub-intervals (","text":"","code":"bed_makewindows(x, win_size = 0, step_size = 0, num_win = 0, reverse = FALSE)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_makewindows.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Divide intervals into new sub-intervals (","text":"x ivl_df win_size divide intervals fixed-size windows step_size size step next window num_win divide intervals fixed number windows reverse reverse window numbers","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_makewindows.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Divide intervals into new sub-intervals (","text":"ivl_df .win_id column contains numeric identifier window.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_makewindows.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Divide intervals into new sub-intervals (","text":"name .win_id columns can used create new interval names (see 'namenum' example ) subsequent group_by operations (see vignette).","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_makewindows.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Divide intervals into new sub-intervals (","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, ~name, ~score, ~strand, \"chr1\", 100, 200, \"A\", \".\", \"+\" ) bed_glyph(bed_makewindows(x, num_win = 10), label = \".win_id\") # Fixed number of windows bed_makewindows(x, num_win = 10) #> # A tibble: 10 × 7 #> chrom start end name score strand .win_id #> #> 1 chr1 100 110 A . + 1 #> 2 chr1 110 120 A . + 2 #> 3 chr1 120 130 A . + 3 #> 4 chr1 130 140 A . + 4 #> 5 chr1 140 150 A . + 5 #> 6 chr1 150 160 A . + 6 #> 7 chr1 160 170 A . + 7 #> 8 chr1 170 180 A . + 8 #> 9 chr1 180 190 A . + 9 #> 10 chr1 190 200 A . + 10 # Fixed window size bed_makewindows(x, win_size = 10) #> # A tibble: 10 × 7 #> chrom start end name score strand .win_id #> #> 1 chr1 100 110 A . + 1 #> 2 chr1 110 120 A . + 2 #> 3 chr1 120 130 A . + 3 #> 4 chr1 130 140 A . + 4 #> 5 chr1 140 150 A . + 5 #> 6 chr1 150 160 A . + 6 #> 7 chr1 160 170 A . + 7 #> 8 chr1 170 180 A . + 8 #> 9 chr1 180 190 A . + 9 #> 10 chr1 190 200 A . + 10 # Fixed window size with overlaps bed_makewindows(x, win_size = 10, step_size = 5) #> # A tibble: 20 × 7 #> chrom start end name score strand .win_id #> #> 1 chr1 100 110 A . + 1 #> 2 chr1 105 115 A . + 2 #> 3 chr1 110 120 A . + 3 #> 4 chr1 115 125 A . + 4 #> 5 chr1 120 130 A . + 5 #> 6 chr1 125 135 A . + 6 #> 7 chr1 130 140 A . + 7 #> 8 chr1 135 145 A . + 8 #> 9 chr1 140 150 A . + 9 #> 10 chr1 145 155 A . + 10 #> 11 chr1 150 160 A . + 11 #> 12 chr1 155 165 A . + 12 #> 13 chr1 160 170 A . + 13 #> 14 chr1 165 175 A . + 14 #> 15 chr1 170 180 A . + 15 #> 16 chr1 175 185 A . + 16 #> 17 chr1 180 190 A . + 17 #> 18 chr1 185 195 A . + 18 #> 19 chr1 190 200 A . + 19 #> 20 chr1 195 200 A . + 20 # reverse win_id bed_makewindows(x, win_size = 10, reverse = TRUE) #> # A tibble: 10 × 7 #> chrom start end name score strand .win_id #> #> 1 chr1 100 110 A . + 10 #> 2 chr1 110 120 A . + 9 #> 3 chr1 120 130 A . + 8 #> 4 chr1 130 140 A . + 7 #> 5 chr1 140 150 A . + 6 #> 6 chr1 150 160 A . + 5 #> 7 chr1 160 170 A . + 4 #> 8 chr1 170 180 A . + 3 #> 9 chr1 180 190 A . + 2 #> 10 chr1 190 200 A . + 1 # bedtools 'namenum' wins <- bed_makewindows(x, win_size = 10) dplyr::mutate(wins, namenum = stringr::str_c(name, \"_\", .win_id)) #> # A tibble: 10 × 8 #> chrom start end name score strand .win_id namenum #> #> 1 chr1 100 110 A . + 1 A_1 #> 2 chr1 110 120 A . + 2 A_2 #> 3 chr1 120 130 A . + 3 A_3 #> 4 chr1 130 140 A . + 4 A_4 #> 5 chr1 140 150 A . + 5 A_5 #> 6 chr1 150 160 A . + 6 A_6 #> 7 chr1 160 170 A . + 7 A_7 #> 8 chr1 170 180 A . + 8 A_8 #> 9 chr1 180 190 A . + 9 A_9 #> 10 chr1 190 200 A . + 10 A_10"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_map.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate summaries from overlapping intervals. — bed_map","title":"Calculate summaries from overlapping intervals. — bed_map","text":"Apply functions like min() count() intersecting intervals. bed_map() uses bed_intersect() identify intersecting intervals, output columns suffixed .x .y. Expressions refer input columns x y columns must take suffixes account.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_map.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate summaries from overlapping intervals. — bed_map","text":"","code":"bed_map(x, y, ..., min_overlap = 1) concat(.data, sep = \",\") values_unique(.data, sep = \",\") values(.data, sep = \",\")"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_map.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate summaries from overlapping intervals. — bed_map","text":"x ivl_df y ivl_df ... name-value pairs specifying column names expressions apply min_overlap minimum overlap intervals. .data data sep separator character","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_map.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate summaries from overlapping intervals. — bed_map","text":"ivl_df","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_map.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate summaries from overlapping intervals. — bed_map","text":"Book-ended intervals can included setting min_overlap = 0. Non-intersecting intervals x included result NA values. input tbls grouped chrom default, additional groups can added using dplyr::group_by(). example, grouping strand constrain analyses strand. compare opposing strands across two tbls, strands y tbl can first inverted using flip_strands().","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_map.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate summaries from overlapping intervals. — bed_map","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, 'chr1', 100, 250, 'chr2', 250, 500 ) y <- tibble::tribble( ~chrom, ~start, ~end, ~value, 'chr1', 100, 250, 10, 'chr1', 150, 250, 20, 'chr2', 250, 500, 500 ) bed_glyph(bed_map(x, y, value = sum(value)), label = 'value') # summary examples bed_map(x, y, .sum = sum(value)) #> # A tibble: 2 × 4 #> chrom start end .sum #> #> 1 chr1 100 250 30 #> 2 chr2 250 500 500 bed_map(x, y, .min = min(value), .max = max(value)) #> # A tibble: 2 × 5 #> chrom start end .min .max #> #> 1 chr1 100 250 10 20 #> 2 chr2 250 500 500 500 # identify non-intersecting intervals to include in the result res <- bed_map(x, y, .sum = sum(value)) x_not <- bed_intersect(x, y, invert = TRUE) dplyr::bind_rows(res, x_not) #> # A tibble: 2 × 4 #> chrom start end .sum #> #> 1 chr1 100 250 30 #> 2 chr2 250 500 500 # create a list-column bed_map(x, y, .values = list(value)) #> # A tibble: 2 × 4 #> chrom start end .values #> #> 1 chr1 100 250 #> 2 chr2 250 500 # use `nth` family from dplyr bed_map(x, y, .first = dplyr::first(value)) #> # A tibble: 2 × 4 #> chrom start end .first #> #> 1 chr1 100 250 10 #> 2 chr2 250 500 500 bed_map(x, y, .absmax = abs(max(value))) #> # A tibble: 2 × 4 #> chrom start end .absmax #> #> 1 chr1 100 250 20 #> 2 chr2 250 500 500 bed_map(x, y, .count = length(value)) #> # A tibble: 2 × 4 #> chrom start end .count #> #> 1 chr1 100 250 2 #> 2 chr2 250 500 1 bed_map(x, y, .vals = values(value)) #> # A tibble: 2 × 4 #> chrom start end .vals #> #> 1 chr1 100 250 10,20 #> 2 chr2 250 500 500 # count defaults are NA not 0; differs from bedtools2 ... bed_map(x, y, .counts = dplyr::n()) #> # A tibble: 2 × 4 #> chrom start end .counts #> #> 1 chr1 100 250 2 #> 2 chr2 250 500 1 # ... but NA counts can be coverted to 0's dplyr::mutate(bed_map(x, y, .counts = dplyr::n()), .counts = ifelse(is.na(.counts), 0, .counts)) #> # A tibble: 2 × 4 #> chrom start end .counts #> #> 1 chr1 100 250 2 #> 2 chr2 250 500 1"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_merge.html","id":null,"dir":"Reference","previous_headings":"","what":"Merge overlapping intervals. — bed_merge","title":"Merge overlapping intervals. — bed_merge","text":"Operations can performed merged intervals specifying name-value pairs. Default max_dist 0 means book-ended intervals merged.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_merge.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Merge overlapping intervals. — bed_merge","text":"","code":"bed_merge(x, max_dist = 0, ...)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_merge.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Merge overlapping intervals. — bed_merge","text":"x ivl_df max_dist maximum distance intervals merge ... name-value pairs specify operations merged intervals","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_merge.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Merge overlapping intervals. — bed_merge","text":"ivl_df","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_merge.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Merge overlapping intervals. — bed_merge","text":"input tbls grouped chrom default, additional groups can added using dplyr::group_by(). example, grouping strand constrain analyses strand. compare opposing strands across two tbls, strands y tbl can first inverted using flip_strands().","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_merge.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Merge overlapping intervals. — bed_merge","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 1, 50, \"chr1\", 10, 75, \"chr1\", 100, 120 ) bed_glyph(bed_merge(x)) x <- tibble::tribble( ~chrom, ~start, ~end, ~value, ~strand, \"chr1\", 1, 50, 1, \"+\", \"chr1\", 100, 200, 2, \"+\", \"chr1\", 150, 250, 3, \"-\", \"chr2\", 1, 25, 4, \"+\", \"chr2\", 200, 400, 5, \"-\", \"chr2\", 400, 500, 6, \"+\", \"chr2\", 450, 550, 7, \"+\" ) bed_merge(x) #> # A tibble: 4 × 3 #> chrom start end #> #> 1 chr1 1 50 #> 2 chr1 100 250 #> 3 chr2 1 25 #> 4 chr2 200 550 bed_merge(x, max_dist = 100) #> # A tibble: 3 × 3 #> chrom start end #> #> 1 chr1 1 250 #> 2 chr2 1 25 #> 3 chr2 200 550 # merge intervals on same strand bed_merge(dplyr::group_by(x, strand)) #> # A tibble: 6 × 4 #> # Groups: strand [2] #> chrom start end strand #> #> 1 chr1 1 50 + #> 2 chr1 100 200 + #> 3 chr1 150 250 - #> 4 chr2 1 25 + #> 5 chr2 400 550 + #> 6 chr2 200 400 - bed_merge(x, .value = sum(value)) #> # A tibble: 4 × 4 #> chrom start end .value #> #> 1 chr1 1 50 1 #> 2 chr1 100 250 5 #> 3 chr2 1 25 4 #> 4 chr2 200 550 18"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_partition.html","id":null,"dir":"Reference","previous_headings":"","what":"Partition intervals into elemental intervals — bed_partition","title":"Partition intervals into elemental intervals — bed_partition","text":"Convert set intervals elemental intervals contain start end position set.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_partition.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Partition intervals into elemental intervals — bed_partition","text":"","code":"bed_partition(x, ...)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_partition.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Partition intervals into elemental intervals — bed_partition","text":"x ivl_df ... name-value pairs specifying column names expressions apply","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_partition.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Partition intervals into elemental intervals — bed_partition","text":"ivl_df()","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_partition.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Partition intervals into elemental intervals — bed_partition","text":"Summary operations, min() count() can performed elemental intervals specifying name-value pairs. function useful calculating summaries across overlapping intervals without merging intervals. input tbls grouped chrom default, additional groups can added using dplyr::group_by(). example, grouping strand constrain analyses strand. compare opposing strands across two tbls, strands y tbl can first inverted using flip_strands().","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_partition.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Partition intervals into elemental intervals — bed_partition","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, ~value, ~strand, \"chr1\", 100, 500, 10, \"+\", \"chr1\", 200, 400, 20, \"-\", \"chr1\", 300, 550, 30, \"+\", \"chr1\", 550, 575, 2, \"+\", \"chr1\", 800, 900, 5, \"+\" ) bed_glyph(bed_partition(x)) bed_glyph(bed_partition(x, value = sum(value)), label = \"value\") bed_partition(x) #> # A tibble: 7 × 3 #> chrom start end #> #> 1 chr1 100 200 #> 2 chr1 200 300 #> 3 chr1 300 400 #> 4 chr1 400 500 #> 5 chr1 500 550 #> 6 chr1 550 575 #> 7 chr1 800 900 # compute summary over each elemental interval bed_partition(x, value = sum(value)) #> # A tibble: 7 × 4 #> chrom start end value #> #> 1 chr1 100 200 10 #> 2 chr1 200 300 30 #> 3 chr1 300 400 60 #> 4 chr1 400 500 40 #> 5 chr1 500 550 30 #> 6 chr1 550 575 2 #> 7 chr1 800 900 5 # partition and compute summaries based on group x <- dplyr::group_by(x, strand) bed_partition(x, value = sum(value)) #> # A tibble: 6 × 5 #> chrom start end strand value #> #> 1 chr1 100 300 + 10 #> 2 chr1 200 400 - 20 #> 3 chr1 300 500 + 40 #> 4 chr1 500 550 + 30 #> 5 chr1 550 575 + 2 #> 6 chr1 800 900 + 5 # combine values across multiple tibbles y <- tibble::tribble( ~chrom, ~start, ~end, ~value, ~strand, \"chr1\", 10, 500, 100, \"+\", \"chr1\", 250, 420, 200, \"-\", \"chr1\", 350, 550, 300, \"+\", \"chr1\", 550, 555, 20, \"+\", \"chr1\", 800, 900, 50, \"+\" ) x <- dplyr::bind_rows(x, y) bed_partition(x, value = sum(value)) #> # A tibble: 11 × 5 #> chrom start end strand value #> #> 1 chr1 10 100 + 100 #> 2 chr1 100 300 + 110 #> 3 chr1 200 250 - 20 #> 4 chr1 250 400 - 220 #> 5 chr1 300 350 + 140 #> 6 chr1 350 500 + 440 #> 7 chr1 400 420 - 200 #> 8 chr1 500 550 + 330 #> 9 chr1 550 555 + 22 #> 10 chr1 555 575 + 2 #> 11 chr1 800 900 + 55"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_projection.html","id":null,"dir":"Reference","previous_headings":"","what":"Projection test for query interval overlap. — bed_projection","title":"Projection test for query interval overlap. — bed_projection","text":"Projection test query interval overlap.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_projection.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Projection test for query interval overlap. — bed_projection","text":"","code":"bed_projection(x, y, genome, by_chrom = FALSE)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_projection.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Projection test for query interval overlap. — bed_projection","text":"x ivl_df y ivl_df genome genome_df by_chrom compute test per chromosome","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_projection.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Projection test for query interval overlap. — bed_projection","text":"ivl_df following columns: chrom name chromosome tested by_chrom = TRUE, otherwise value whole_genome p.value p-value binomial test. p-values > 0.5 converted 1 - p-value lower_tail FALSE obs_exp_ratio ratio observed expected overlap frequency lower_tail TRUE indicates observed overlaps lower tail distribution (e.g., less overlap expected). FALSE indicates observed overlaps upper tail distribution (e.g., overlap expected)","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_projection.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Projection test for query interval overlap. — bed_projection","text":"Interval statistics can used combination dplyr::group_by() dplyr::() calculate statistics subsets data. See vignette('interval-stats') examples.","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_projection.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Projection test for query interval overlap. — bed_projection","text":"","code":"genome <- read_genome(valr_example(\"hg19.chrom.sizes.gz\")) x <- bed_random(genome, seed = 1010486) y <- bed_random(genome, seed = 9203911) bed_projection(x, y, genome) #> # A tibble: 1 × 4 #> chrom p.value obs_exp_ratio lower_tail #> #> 1 whole_genome 0.000850 1.01 FALSE bed_projection(x, y, genome, by_chrom = TRUE) #> # A tibble: 25 × 4 #> chrom p.value obs_exp_ratio lower_tail #> #> 1 chr1 0.176 1.01 FALSE #> 2 chr10 0.0209 1.02 FALSE #> 3 chr11 0.118 1.01 FALSE #> 4 chr12 0.479 1.00 FALSE #> 5 chr13 0.245 1.01 FALSE #> 6 chr14 0.120 0.990 TRUE #> 7 chr15 0.333 1.00 FALSE #> 8 chr16 0.213 1.01 FALSE #> 9 chr17 0.181 0.991 TRUE #> 10 chr18 0.0306 1.02 FALSE #> # ℹ 15 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_random.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate randomly placed intervals on a genome. — bed_random","title":"Generate randomly placed intervals on a genome. — bed_random","text":"Generate randomly placed intervals genome.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_random.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate randomly placed intervals on a genome. — bed_random","text":"","code":"bed_random(genome, length = 1000, n = 1e+06, seed = 0, sorted = TRUE)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_random.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate randomly placed intervals on a genome. — bed_random","text":"genome genome_df length length intervals n number intervals generate seed seed RNG reproducible intervals sorted return sorted output","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_random.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generate randomly placed intervals on a genome. — bed_random","text":"ivl_df","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_random.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Generate randomly placed intervals on a genome. — bed_random","text":"Sorting can suppressed sorted = FALSE.","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_random.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Generate randomly placed intervals on a genome. — bed_random","text":"","code":"genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 10000000, \"chr2\", 50000000, \"chr3\", 60000000, \"chrX\", 5000000 ) bed_random(genome, seed = 10104) #> # A tibble: 1,000,000 × 3 #> chrom start end #> #> 1 chr1 265 1265 #> 2 chr1 315 1315 #> 3 chr1 335 1335 #> 4 chr1 513 1513 #> 5 chr1 625 1625 #> 6 chr1 635 1635 #> 7 chr1 653 1653 #> 8 chr1 731 1731 #> 9 chr1 859 1859 #> 10 chr1 1024 2024 #> # ℹ 999,990 more rows # sorting can be suppressed bed_random(genome, sorted = FALSE, seed = 10104) #> # A tibble: 1,000,000 × 3 #> chrom start end #> #> 1 chr3 2681468 2682468 #> 2 chr3 25364020 25365020 #> 3 chr2 43134407 43135407 #> 4 chr2 36344257 36345257 #> 5 chr3 39019690 39020690 #> 6 chr3 59869387 59870387 #> 7 chr3 56220373 56221373 #> 8 chr3 57965913 57966913 #> 9 chr2 25303342 25304342 #> 10 chr3 16018594 16019594 #> # ℹ 999,990 more rows # 500 random intervals of length 500 bed_random(genome, length = 500, n = 500, seed = 10104) #> # A tibble: 500 × 3 #> chrom start end #> #> 1 chr1 379360 379860 #> 2 chr1 394770 395270 #> 3 chr1 1215880 1216380 #> 4 chr1 1339287 1339787 #> 5 chr1 2046513 2047013 #> 6 chr1 2156755 2157255 #> 7 chr1 2189109 2189609 #> 8 chr1 2221665 2222165 #> 9 chr1 2223456 2223956 #> 10 chr1 2253135 2253635 #> # ℹ 490 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_reldist.html","id":null,"dir":"Reference","previous_headings":"","what":"Compute relative distances between intervals. — bed_reldist","title":"Compute relative distances between intervals. — bed_reldist","text":"Compute relative distances intervals.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_reldist.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compute relative distances between intervals. — bed_reldist","text":"","code":"bed_reldist(x, y, detail = FALSE)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_reldist.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compute relative distances between intervals. — bed_reldist","text":"x ivl_df y ivl_df detail report relative distances x interval.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_reldist.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compute relative distances between intervals. — bed_reldist","text":"detail = FALSE, ivl_df summarizes calculated .reldist values following columns: .reldist relative distance metric .counts number metric observations .total total observations .freq frequency observation detail = TRUE, .reldist column reports relative distance input x interval.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_reldist.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Compute relative distances between intervals. — bed_reldist","text":"Interval statistics can used combination dplyr::group_by() dplyr::() calculate statistics subsets data. See vignette('interval-stats') examples.","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_reldist.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Compute relative distances between intervals. — bed_reldist","text":"","code":"genome <- read_genome(valr_example(\"hg19.chrom.sizes.gz\")) x <- bed_random(genome, seed = 1010486) y <- bed_random(genome, seed = 9203911) bed_reldist(x, y) #> # A tibble: 51 × 4 #> .reldist .counts .total .freq #> #> 1 0 20202 999938 0.0202 #> 2 0.01 20031 999938 0.0200 #> 3 0.02 19977 999938 0.0200 #> 4 0.03 19871 999938 0.0199 #> 5 0.04 20129 999938 0.0201 #> 6 0.05 20197 999938 0.0202 #> 7 0.06 20020 999938 0.0200 #> 8 0.07 20063 999938 0.0201 #> 9 0.08 20053 999938 0.0201 #> 10 0.09 20021 999938 0.0200 #> # ℹ 41 more rows bed_reldist(x, y, detail = TRUE) #> # A tibble: 999,938 × 4 #> chrom start end .reldist #> #> 1 chr1 5184 6184 0.270 #> 2 chr1 7663 8663 0.226 #> 3 chr1 9858 10858 0.317 #> 4 chr1 13805 14805 0.361 #> 5 chr1 14081 15081 0.402 #> 6 chr1 16398 17398 0.253 #> 7 chr1 17486 18486 0.0912 #> 8 chr1 22063 23063 0.107 #> 9 chr1 22494 23494 0.207 #> 10 chr1 29351 30351 0.400 #> # ℹ 999,928 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_shift.html","id":null,"dir":"Reference","previous_headings":"","what":"Adjust intervals by a fixed size. — bed_shift","title":"Adjust intervals by a fixed size. — bed_shift","text":"--bounds intervals removed default.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_shift.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Adjust intervals by a fixed size. — bed_shift","text":"","code":"bed_shift(x, genome, size = 0, fraction = 0, trim = FALSE)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_shift.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Adjust intervals by a fixed size. — bed_shift","text":"x ivl_df genome ivl_df size number bases shift. positive numbers shift right, negative shift left. fraction define size fraction interval trim adjust coordinates --bounds intervals","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_shift.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Adjust intervals by a fixed size. — bed_shift","text":"ivl_df","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_shift.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Adjust intervals by a fixed size. — bed_shift","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 25, 50, \"chr1\", 100, 125 ) genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 125 ) bed_glyph(bed_shift(x, genome, size = -20)) x <- tibble::tribble( ~chrom, ~start, ~end, ~strand, \"chr1\", 100, 150, \"+\", \"chr1\", 200, 250, \"+\", \"chr2\", 300, 350, \"+\", \"chr2\", 400, 450, \"-\", \"chr3\", 500, 550, \"-\", \"chr3\", 600, 650, \"-\" ) genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 1000, \"chr2\", 2000, \"chr3\", 3000 ) bed_shift(x, genome, 100) #> # A tibble: 6 × 4 #> chrom start end strand #> #> 1 chr1 200 250 + #> 2 chr1 300 350 + #> 3 chr2 400 450 + #> 4 chr2 500 550 - #> 5 chr3 600 650 - #> 6 chr3 700 750 - bed_shift(x, genome, fraction = 0.5) #> # A tibble: 6 × 4 #> chrom start end strand #> #> 1 chr1 125 175 + #> 2 chr1 225 275 + #> 3 chr2 325 375 + #> 4 chr2 425 475 - #> 5 chr3 525 575 - #> 6 chr3 625 675 - # shift with respect to strand stranded <- dplyr::group_by(x, strand) bed_shift(stranded, genome, 100) #> # A tibble: 6 × 4 #> chrom start end strand #> #> 1 chr1 200 250 + #> 2 chr1 300 350 + #> 3 chr2 400 450 + #> 4 chr2 300 350 - #> 5 chr3 400 450 - #> 6 chr3 500 550 -"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_shuffle.html","id":null,"dir":"Reference","previous_headings":"","what":"Shuffle input intervals. — bed_shuffle","title":"Shuffle input intervals. — bed_shuffle","text":"Shuffle input intervals.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_shuffle.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Shuffle input intervals. — bed_shuffle","text":"","code":"bed_shuffle( x, genome, incl = NULL, excl = NULL, max_tries = 1000, within = FALSE, seed = 0 )"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_shuffle.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Shuffle input intervals. — bed_shuffle","text":"x ivl_df genome genome_df incl ivl_df included intervals excl ivl_df excluded intervals max_tries maximum tries identify bounded interval within shuffle within chromosomes seed seed reproducible intervals","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_shuffle.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Shuffle input intervals. — bed_shuffle","text":"ivl_df","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_shuffle.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Shuffle input intervals. — bed_shuffle","text":"","code":"genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 1e6, \"chr2\", 2e6, \"chr3\", 4e6 ) x <- bed_random(genome, seed = 1010486) bed_shuffle(x, genome, seed = 9830491) #> # A tibble: 1,000,000 × 3 #> chrom start end #> #> 1 chr2 1463822 1464822 #> 2 chr2 619967 620967 #> 3 chr2 1769865 1770865 #> 4 chr2 203953 204953 #> 5 chr3 2119387 2120387 #> 6 chr2 1216667 1217667 #> 7 chr3 2109652 2110652 #> 8 chr2 213473 214473 #> 9 chr1 154156 155156 #> 10 chr3 2201278 2202278 #> # ℹ 999,990 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_slop.html","id":null,"dir":"Reference","previous_headings":"","what":"Increase the size of input intervals. — bed_slop","title":"Increase the size of input intervals. — bed_slop","text":"Increase size input intervals.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_slop.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Increase the size of input intervals. — bed_slop","text":"","code":"bed_slop( x, genome, both = 0, left = 0, right = 0, fraction = FALSE, strand = FALSE, trim = FALSE, ... )"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_slop.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Increase the size of input intervals. — bed_slop","text":"x ivl_df genome genome_df number bases sizes left number bases left side right number bases right side fraction define flanks based fraction interval length strand define left right based strand trim adjust coordinates --bounds intervals ... extra arguments (used)","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_slop.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Increase the size of input intervals. — bed_slop","text":"ivl_df","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_slop.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Increase the size of input intervals. — bed_slop","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 110, 120, \"chr1\", 225, 235 ) genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 400 ) bed_glyph(bed_slop(x, genome, both = 20, trim = TRUE)) genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 5000 ) x <- tibble::tribble( ~chrom, ~start, ~end, ~name, ~score, ~strand, \"chr1\", 500, 1000, \".\", \".\", \"+\", \"chr1\", 1000, 1500, \".\", \".\", \"-\" ) bed_slop(x, genome, left = 100) #> # A tibble: 2 × 6 #> chrom start end name score strand #> #> 1 chr1 400 1000 . . + #> 2 chr1 900 1500 . . - bed_slop(x, genome, right = 100) #> # A tibble: 2 × 6 #> chrom start end name score strand #> #> 1 chr1 500 1100 . . + #> 2 chr1 1000 1600 . . - bed_slop(x, genome, both = 100) #> # A tibble: 2 × 6 #> chrom start end name score strand #> #> 1 chr1 400 1100 . . + #> 2 chr1 900 1600 . . - bed_slop(x, genome, both = 0.5, fraction = TRUE) #> # A tibble: 2 × 6 #> chrom start end name score strand #> #> 1 chr1 250 1250 . . + #> 2 chr1 750 1750 . . -"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_sort.html","id":null,"dir":"Reference","previous_headings":"","what":"Sort a set of intervals. — bed_sort","title":"Sort a set of intervals. — bed_sort","text":"Sort set intervals.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_sort.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Sort a set of intervals. — bed_sort","text":"","code":"bed_sort(x, by_size = FALSE, by_chrom = FALSE, reverse = FALSE)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_sort.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Sort a set of intervals. — bed_sort","text":"x ivl_df by_size sort interval size by_chrom sort within chromosome reverse reverse sort order","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_sort.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Sort a set of intervals. — bed_sort","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr8\", 500, 1000, \"chr8\", 1000, 5000, \"chr8\", 100, 200, \"chr1\", 100, 300, \"chr1\", 100, 200 ) # sort by chrom and start bed_sort(x) #> # A tibble: 5 × 3 #> chrom start end #> #> 1 chr1 100 200 #> 2 chr1 100 300 #> 3 chr8 100 200 #> 4 chr8 500 1000 #> 5 chr8 1000 5000 # reverse sort order bed_sort(x, reverse = TRUE) #> # A tibble: 5 × 3 #> chrom start end #> #> 1 chr1 100 300 #> 2 chr1 100 200 #> 3 chr8 1000 5000 #> 4 chr8 500 1000 #> 5 chr8 100 200 # sort by interval size bed_sort(x, by_size = TRUE) #> # A tibble: 5 × 3 #> chrom start end #> #> 1 chr8 100 200 #> 2 chr1 100 200 #> 3 chr1 100 300 #> 4 chr8 500 1000 #> 5 chr8 1000 5000 # sort by decreasing interval size bed_sort(x, by_size = TRUE, reverse = TRUE) #> # A tibble: 5 × 3 #> chrom start end #> #> 1 chr8 1000 5000 #> 2 chr8 500 1000 #> 3 chr1 100 300 #> 4 chr8 100 200 #> 5 chr1 100 200 # sort by interval size within chrom bed_sort(x, by_size = TRUE, by_chrom = TRUE) #> # A tibble: 5 × 3 #> chrom start end #> #> 1 chr1 100 200 #> 2 chr1 100 300 #> 3 chr8 100 200 #> 4 chr8 500 1000 #> 5 chr8 1000 5000"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_subtract.html","id":null,"dir":"Reference","previous_headings":"","what":"Subtract two sets of intervals. — bed_subtract","title":"Subtract two sets of intervals. — bed_subtract","text":"Subtract y intervals x intervals.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_subtract.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Subtract two sets of intervals. — bed_subtract","text":"","code":"bed_subtract(x, y, any = FALSE)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_subtract.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Subtract two sets of intervals. — bed_subtract","text":"x ivl_df y ivl_df remove x intervals overlap y","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_subtract.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Subtract two sets of intervals. — bed_subtract","text":"input tbls grouped chrom default, additional groups can added using dplyr::group_by(). example, grouping strand constrain analyses strand. compare opposing strands across two tbls, strands y tbl can first inverted using flip_strands().","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_subtract.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Subtract two sets of intervals. — bed_subtract","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 1, 100 ) y <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 50, 75 ) bed_glyph(bed_subtract(x, y)) x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 100, 200, \"chr1\", 250, 400, \"chr1\", 500, 600, \"chr1\", 1000, 1200, \"chr1\", 1300, 1500 ) y <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 150, 175, \"chr1\", 510, 525, \"chr1\", 550, 575, \"chr1\", 900, 1050, \"chr1\", 1150, 1250, \"chr1\", 1299, 1501 ) bed_subtract(x, y) #> # A tibble: 7 × 3 #> chrom start end #> #> 1 chr1 100 150 #> 2 chr1 175 200 #> 3 chr1 250 400 #> 4 chr1 500 510 #> 5 chr1 525 550 #> 6 chr1 575 600 #> 7 chr1 1050 1150 bed_subtract(x, y, any = TRUE) #> # A tibble: 1 × 3 #> chrom start end #> #> 1 chr1 250 400"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_window.html","id":null,"dir":"Reference","previous_headings":"","what":"Identify intervals within a specified distance. — bed_window","title":"Identify intervals within a specified distance. — bed_window","text":"Identify intervals within specified distance.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_window.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Identify intervals within a specified distance. — bed_window","text":"","code":"bed_window(x, y, genome, ...)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_window.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Identify intervals within a specified distance. — bed_window","text":"x ivl_df y ivl_df genome genome_df ... params bed_slop bed_intersect","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_window.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Identify intervals within a specified distance. — bed_window","text":"input tbls grouped chrom default, additional groups can added using dplyr::group_by(). example, grouping strand constrain analyses strand. compare opposing strands across two tbls, strands y tbl can first inverted using flip_strands().","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_window.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Identify intervals within a specified distance. — bed_window","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 25, 50, \"chr1\", 100, 125 ) y <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 60, 75 ) genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 125 ) bed_glyph(bed_window(x, y, genome, both = 15)) x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 10, 100, \"chr2\", 200, 400, \"chr2\", 300, 500, \"chr2\", 800, 900 ) y <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 150, 400, \"chr2\", 230, 430, \"chr2\", 350, 430 ) genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 500, \"chr2\", 1000 ) bed_window(x, y, genome, both = 100) #> # A tibble: 4 × 7 #> chrom start.x end.x start.y end.y .source .overlap #> #> 1 chr2 200 400 230 430 1 200 #> 2 chr2 200 400 350 430 1 80 #> 3 chr2 300 500 230 430 1 200 #> 4 chr2 300 500 350 430 1 80"},{"path":"https://rnabioco.github.io/valr/dev/reference/bound_intervals.html","id":null,"dir":"Reference","previous_headings":"","what":"Select intervals bounded by a genome. — bound_intervals","title":"Select intervals bounded by a genome. — bound_intervals","text":"Used remove --bounds intervals, trim interval coordinates using genome.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bound_intervals.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Select intervals bounded by a genome. — bound_intervals","text":"","code":"bound_intervals(x, genome, trim = FALSE)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bound_intervals.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Select intervals bounded by a genome. — bound_intervals","text":"x ivl_df genome genome_df trim adjust coordinates --bounds intervals","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bound_intervals.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Select intervals bounded by a genome. — bound_intervals","text":"ivl_df","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bound_intervals.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Select intervals bounded by a genome. — bound_intervals","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", -100, 500, \"chr1\", 100, 1e9, \"chr1\", 500, 1000 ) genome <- read_genome(valr_example(\"hg19.chrom.sizes.gz\")) # out-of-bounds are removed by default ... bound_intervals(x, genome) #> # A tibble: 1 × 3 #> chrom start end #> #> 1 chr1 500 1000 # ... or can be trimmed within the bounds of a genome bound_intervals(x, genome, trim = TRUE) #> # A tibble: 3 × 3 #> chrom start end #> #> 1 chr1 0 500 #> 2 chr1 100 249250621 #> 3 chr1 500 1000"},{"path":"https://rnabioco.github.io/valr/dev/reference/create_introns.html","id":null,"dir":"Reference","previous_headings":"","what":"Create intron features. — create_introns","title":"Create intron features. — create_introns","text":"Numbers score column intron numbers 5' 3' independent strand. .e., first introns + - strand genes score values 1.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/create_introns.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create intron features. — create_introns","text":"","code":"create_introns(x)"},{"path":"https://rnabioco.github.io/valr/dev/reference/create_introns.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create intron features. — create_introns","text":"x ivl_df BED12 format","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/create_introns.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create intron features. — create_introns","text":"","code":"x <- read_bed12(valr_example(\"mm9.refGene.bed.gz\")) create_introns(x) #> # A tibble: 1,583 × 6 #> chrom start end name score strand #> #> 1 chr1 3207049 3411782 NM_001011874 2 - #> 2 chr1 3411982 3660632 NM_001011874 1 - #> 3 chr1 4283093 4341990 NM_001195662 3 - #> 4 chr1 4342162 4342282 NM_001195662 2 - #> 5 chr1 4342918 4399250 NM_001195662 1 - #> 6 chr1 4848057 4857550 NM_001159750 1 + #> 7 chr1 4848057 4857550 NM_011541 1 + #> 8 chr1 4848584 4857550 NM_001159751 1 + #> 9 chr1 4857613 4868107 NM_001159750 2 + #> 10 chr1 4857613 4868107 NM_011541 2 + #> # ℹ 1,573 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/create_tss.html","id":null,"dir":"Reference","previous_headings":"","what":"Create transcription start site features. — create_tss","title":"Create transcription start site features. — create_tss","text":"Create transcription start site features.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/create_tss.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create transcription start site features. — create_tss","text":"","code":"create_tss(x)"},{"path":"https://rnabioco.github.io/valr/dev/reference/create_tss.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create transcription start site features. — create_tss","text":"x ivl_df BED format","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/create_tss.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create transcription start site features. — create_tss","text":"","code":"x <- read_bed12(valr_example(\"mm9.refGene.bed.gz\")) create_tss(x) #> # A tibble: 100 × 6 #> chrom start end name score strand #> #> 1 chr1 3661578 3661579 NM_001011874 0 - #> 2 chr1 4399321 4399322 NM_001195662 0 - #> 3 chr1 4847774 4847775 NM_001159750 0 + #> 4 chr1 4847774 4847775 NM_011541 0 + #> 5 chr1 4848408 4848409 NM_001159751 0 + #> 6 chr1 5008814 5008815 NM_001290372 0 - #> 7 chr1 5009619 5009620 NM_021374 0 - #> 8 chr1 5060365 5060366 NM_001177795 0 - #> 9 chr1 5073166 5073167 NM_001310442 0 + #> 10 chr1 5073166 5073167 NM_133826 0 + #> # ℹ 90 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/create_utrs3.html","id":null,"dir":"Reference","previous_headings":"","what":"Create 3' UTR features. — create_utrs3","title":"Create 3' UTR features. — create_utrs3","text":"Create 3' UTR features.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/create_utrs3.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create 3' UTR features. — create_utrs3","text":"","code":"create_utrs3(x)"},{"path":"https://rnabioco.github.io/valr/dev/reference/create_utrs3.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create 3' UTR features. — create_utrs3","text":"x ivl_df BED12 format","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/create_utrs3.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create 3' UTR features. — create_utrs3","text":"","code":"x <- read_bed12(valr_example(\"mm9.refGene.bed.gz\")) create_utrs3(x) #> # A tibble: 99 × 6 #> chrom start end name score strand #> #> 1 chr1 3204562 3206102 NM_001011874 0 - #> 2 chr1 4280926 4283061 NM_001195662 0 - #> 3 chr1 4886445 4887990 NM_001159750 0 + #> 4 chr1 4886445 4887990 NM_011541 0 + #> 5 chr1 4886445 4887990 NM_001159751 0 + #> 6 chr1 4899656 4900554 NM_001290372 0 - #> 7 chr1 4899656 4900554 NM_021374 0 - #> 8 chr1 4899656 4900554 NM_001177795 0 - #> 9 chr1 5152246 5152630 NM_001310442 0 + #> 10 chr1 5152246 5152630 NM_133826 0 + #> # ℹ 89 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/create_utrs5.html","id":null,"dir":"Reference","previous_headings":"","what":"Create 5' UTR features. — create_utrs5","title":"Create 5' UTR features. — create_utrs5","text":"Create 5' UTR features.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/create_utrs5.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create 5' UTR features. — create_utrs5","text":"","code":"create_utrs5(x)"},{"path":"https://rnabioco.github.io/valr/dev/reference/create_utrs5.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create 5' UTR features. — create_utrs5","text":"x ivl_df BED12 format","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/create_utrs5.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create 5' UTR features. — create_utrs5","text":"","code":"x <- read_bed12(valr_example(\"mm9.refGene.bed.gz\")) create_utrs5(x) #> # A tibble: 97 × 6 #> chrom start end name score strand #> #> 1 chr1 3661429 3661579 NM_001011874 0 - #> 2 chr1 4399268 4399322 NM_001195662 0 - #> 3 chr1 4847774 4847994 NM_001159750 0 + #> 4 chr1 4847774 4847994 NM_011541 0 + #> 5 chr1 4848408 4848488 NM_001159751 0 + #> 6 chr1 4914046 5008815 NM_001290372 0 - #> 7 chr1 5009460 5009620 NM_021374 0 - #> 8 chr1 5060258 5060366 NM_001177795 0 - #> 9 chr1 5073166 5074531 NM_001310442 0 + #> 10 chr1 5073166 5074531 NM_133826 0 + #> # ℹ 87 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/db.html","id":null,"dir":"Reference","previous_headings":"","what":"Fetch data from remote databases. — db","title":"Fetch data from remote databases. — db","text":"Currently db_ucsc db_ensembl available connections.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/db.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fetch data from remote databases. — db","text":"","code":"db_ucsc( dbname, host = \"genome-mysql.cse.ucsc.edu\", user = \"genomep\", password = \"password\", port = 3306, ... ) db_ensembl( dbname, host = \"ensembldb.ensembl.org\", user = \"anonymous\", password = \"\", port = 3306, ... )"},{"path":"https://rnabioco.github.io/valr/dev/reference/db.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fetch data from remote databases. — db","text":"dbname name database host hostname user username password password port MySQL connection port ... params connection","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/db.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fetch data from remote databases. — db","text":"","code":"if (FALSE) { if (require(RMariaDB)) { library(dplyr) ucsc <- db_ucsc(\"hg38\") # fetch the `refGene` tbl tbl(ucsc, \"refGene\") # the `chromInfo` tbls have size information tbl(ucsc, \"chromInfo\") } } if (FALSE) { if (require(RMariaDB)) { library(dplyr) # squirrel genome ensembl <- db_ensembl(\"spermophilus_tridecemlineatus_core_67_2\") tbl(ensembl, \"gene\") } }"},{"path":"https://rnabioco.github.io/valr/dev/reference/flip_strands.html","id":null,"dir":"Reference","previous_headings":"","what":"Flip strands in intervals. — flip_strands","title":"Flip strands in intervals. — flip_strands","text":"Flips positive (+) stranded intervals negative (-) strands, vice-versa. Facilitates comparisons among intervals opposing strands.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/flip_strands.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Flip strands in intervals. — flip_strands","text":"","code":"flip_strands(x)"},{"path":"https://rnabioco.github.io/valr/dev/reference/flip_strands.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Flip strands in intervals. — flip_strands","text":"x ivl_df","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/flip_strands.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Flip strands in intervals. — flip_strands","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, ~strand, \"chr1\", 1, 100, \"+\", \"chr2\", 1, 100, \"-\" ) flip_strands(x) #> # A tibble: 2 × 4 #> chrom start end strand #> #> 1 chr1 1 100 - #> 2 chr2 1 100 +"},{"path":"https://rnabioco.github.io/valr/dev/reference/gr_to_bed.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert Granges to bed tibble — gr_to_bed","title":"Convert Granges to bed tibble — gr_to_bed","text":"Convert Granges bed tibble","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/gr_to_bed.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert Granges to bed tibble — gr_to_bed","text":"","code":"gr_to_bed(x)"},{"path":"https://rnabioco.github.io/valr/dev/reference/gr_to_bed.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert Granges to bed tibble — gr_to_bed","text":"x GRanges object convert bed tibble.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/gr_to_bed.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert Granges to bed tibble — gr_to_bed","text":"tibble::tibble()","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/gr_to_bed.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert Granges to bed tibble — gr_to_bed","text":"","code":"if (FALSE) { gr <- GenomicRanges::GRanges( seqnames = S4Vectors::Rle( c(\"chr1\", \"chr2\", \"chr1\", \"chr3\"), c(1, 1, 1, 1) ), ranges = IRanges::IRanges( start = c(1, 10, 50, 100), end = c(100, 500, 1000, 2000), names = head(letters, 4) ), strand = S4Vectors::Rle( c(\"-\", \"+\"), c(2, 2) ) ) gr_to_bed(gr) # There are two ways to convert a bed-like data.frame to GRanges: gr <- GenomicRanges::GRanges( seqnames = S4Vectors::Rle(x$chrom), ranges = IRanges::IRanges( start = x$start + 1, end = x$end, names = x$name ), strand = S4Vectors::Rle(x$strand) ) # or: gr <- GenomicRanges::makeGRangesFromDataFrame(dplyr::mutate(x, start = start + 1)) }"},{"path":"https://rnabioco.github.io/valr/dev/reference/id.html","id":null,"dir":"Reference","previous_headings":"","what":"Plyr function id packaged due to plyr being retired\nCompute a unique numeric id for each unique row in a data frame. — id","title":"Plyr function id packaged due to plyr being retired\nCompute a unique numeric id for each unique row in a data frame. — id","text":"Properties: order(id) equivalent .call(order, df) rows containing data value drop = FALSE room possibilites","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/id.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plyr function id packaged due to plyr being retired\nCompute a unique numeric id for each unique row in a data frame. — id","text":"","code":"id(.variables, drop = FALSE)"},{"path":"https://rnabioco.github.io/valr/dev/reference/id.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plyr function id packaged due to plyr being retired\nCompute a unique numeric id for each unique row in a data frame. — id","text":".variables list variables drop drop unusued factor levels?","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/id.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plyr function id packaged due to plyr being retired\nCompute a unique numeric id for each unique row in a data frame. — id","text":"numeric vector attribute n, giving total number possibilities","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/id_var.html","id":null,"dir":"Reference","previous_headings":"","what":"Plyr function id_var packaged due to plyr being retired\nNumeric id for a vector. — id_var","title":"Plyr function id_var packaged due to plyr being retired\nNumeric id for a vector. — id_var","text":"Plyr function id_var packaged due plyr retired Numeric id vector.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/id_var.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plyr function id_var packaged due to plyr being retired\nNumeric id for a vector. — id_var","text":"","code":"id_var(x, drop = FALSE)"},{"path":"https://rnabioco.github.io/valr/dev/reference/interval_spacing.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate interval spacing. — interval_spacing","title":"Calculate interval spacing. — interval_spacing","text":"Spacing first interval chromosome undefined (NA). leading interval overlapping interval pair negative value.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/interval_spacing.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate interval spacing. — interval_spacing","text":"","code":"interval_spacing(x)"},{"path":"https://rnabioco.github.io/valr/dev/reference/interval_spacing.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate interval spacing. — interval_spacing","text":"x ivl_df","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/interval_spacing.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate interval spacing. — interval_spacing","text":"ivl_df .spacing column.","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/interval_spacing.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate interval spacing. — interval_spacing","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 1, 100, \"chr1\", 150, 200, \"chr2\", 200, 300 ) interval_spacing(x) #> # A tibble: 3 × 4 #> chrom start end .spacing #> #> 1 chr1 1 100 NA #> 2 chr1 150 200 50 #> 3 chr2 200 300 NA"},{"path":"https://rnabioco.github.io/valr/dev/reference/ivl_df.html","id":null,"dir":"Reference","previous_headings":"","what":"Bed-like data.frame requirements for valr functions — ivl_df","title":"Bed-like data.frame requirements for valr functions — ivl_df","text":"Required column names interval dataframes chrom, start end. Internally interval dataframes validated using check_interval() Required column names genome dataframes chrom size. Internally genome dataframes validated using check_genome().","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/ivl_df.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Bed-like data.frame requirements for valr functions — ivl_df","text":"","code":"check_interval(x) check_genome(x)"},{"path":"https://rnabioco.github.io/valr/dev/reference/ivl_df.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Bed-like data.frame requirements for valr functions — ivl_df","text":"x data.frame tibble::tibble","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/ivl_df.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Bed-like data.frame requirements for valr functions — ivl_df","text":"","code":"# using tibble x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 1, 50, \"chr1\", 10, 75, \"chr1\", 100, 120 ) check_interval(x) #> # A tibble: 3 × 3 #> chrom start end #> #> 1 chr1 1 50 #> 2 chr1 10 75 #> 3 chr1 100 120 # using base R data.frame x <- data.frame( chrom = \"chr1\", start = 0, end = 100, stringsAsFactors = FALSE ) check_interval(x) #> # A tibble: 1 × 3 #> chrom start end #> #> 1 chr1 0 100 # example genome input x <- tibble::tribble( ~chrom, ~size, \"chr1\", 1e6 ) check_genome(x) #> # A tibble: 1 × 2 #> chrom size #> #> 1 chr1 1000000"},{"path":"https://rnabioco.github.io/valr/dev/reference/read_bed.html","id":null,"dir":"Reference","previous_headings":"","what":"Read BED and related files. — read_bed","title":"Read BED and related files. — read_bed","text":"read functions BED related formats. Filenames can local file URLs. read functions load data tbls consistent chrom, start end colnames.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_bed.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Read BED and related files. — read_bed","text":"","code":"read_bed( filename, col_types = bed12_coltypes, sort = TRUE, ..., n_fields = NULL ) read_bed12(filename, ...) read_bedgraph(filename, ...) read_narrowpeak(filename, ...) read_broadpeak(filename, ...)"},{"path":"https://rnabioco.github.io/valr/dev/reference/read_bed.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Read BED and related files. — read_bed","text":"filename file URL col_types column type spec readr::read_tsv() sort sort tbl chrom start ... options pass readr::read_tsv() n_fields","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_bed.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Read BED and related files. — read_bed","text":"ivl_df","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_bed.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Read BED and related files. — read_bed","text":"https://genome.ucsc.edu/FAQ/FAQformat.html#format1 https://genome.ucsc.edu/FAQ/FAQformat.html#format1 https://genome.ucsc.edu/goldenPath/help/bedgraph.html https://genome.ucsc.edu/FAQ/FAQformat.html#format12 https://genome.ucsc.edu/FAQ/FAQformat.html#format13","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/read_bed.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Read BED and related files. — read_bed","text":"","code":"# read_bed assumes 3 field BED format. read_bed(valr_example(\"3fields.bed.gz\")) #> # A tibble: 10 × 3 #> chrom start end #> #> 1 chr1 11873 14409 #> 2 chr1 14361 19759 #> 3 chr1 14406 29370 #> 4 chr1 34610 36081 #> 5 chr1 69090 70008 #> 6 chr1 134772 140566 #> 7 chr1 321083 321115 #> 8 chr1 321145 321207 #> 9 chr1 322036 326938 #> 10 chr1 327545 328439 # result is sorted by chrom and start unless `sort = FALSE` read_bed(valr_example(\"3fields.bed.gz\"), sort = FALSE) #> # A tibble: 10 × 3 #> chrom start end #> #> 1 chr1 11873 14409 #> 2 chr1 14361 19759 #> 3 chr1 14406 29370 #> 4 chr1 34610 36081 #> 5 chr1 69090 70008 #> 6 chr1 134772 140566 #> 7 chr1 321083 321115 #> 8 chr1 321145 321207 #> 9 chr1 322036 326938 #> 10 chr1 327545 328439 read_bed12(valr_example(\"mm9.refGene.bed.gz\")) #> # A tibble: 100 × 12 #> chrom start end name score strand cds_start cds_end item_rgb #> #> 1 chr1 3204562 3661579 NM_00101… 0 - 3206102 3661429 0 #> 2 chr1 4280926 4399322 NM_00119… 0 - 4283061 4399268 0 #> 3 chr1 4847774 4887990 NM_00115… 0 + 4847994 4886445 0 #> 4 chr1 4847774 4887990 NM_011541 0 + 4847994 4886445 0 #> 5 chr1 4848408 4887990 NM_00115… 0 + 4848488 4886445 0 #> 6 chr1 4899656 5008815 NM_00129… 0 - 4900554 4914046 0 #> 7 chr1 4899656 5009620 NM_021374 0 - 4900554 5009460 0 #> 8 chr1 4899656 5060366 NM_00117… 0 - 4900554 5060258 0 #> 9 chr1 5073166 5152630 NM_00131… 0 + 5074531 5152246 0 #> 10 chr1 5073166 5152630 NM_133826 0 + 5074531 5152246 0 #> # ℹ 90 more rows #> # ℹ 3 more variables: exon_count , exon_sizes , #> # exon_starts read_bedgraph(valr_example(\"test.bg.gz\")) #> # A tibble: 4 × 4 #> chrom start end value #> #> 1 chr19 49302000 49302300 -1 #> 2 chr19 49302300 49302600 -0.75 #> 3 chr19 49302600 49302900 -0.5 #> 4 chr19 49302900 49303200 -0.25 read_narrowpeak(valr_example(\"sample.narrowPeak.gz\")) #> # A tibble: 570 × 10 #> chrom start end name score strand signal pvalue qvalue peak #> #> 1 chr22 17372940 17373090 . 0 . 4 4.63 -1 -1 #> 2 chr22 17392200 17392350 . 0 . 5 4.67 -1 -1 #> 3 chr22 17398400 17398550 . 0 . 10 11.6 -1 -1 #> 4 chr22 17539180 17539330 . 0 . 21 30.9 -1 -1 #> 5 chr22 17652440 17652590 . 0 . 6 5.35 -1 -1 #> 6 chr22 17652780 17652930 . 0 . 12 12.5 -1 -1 #> 7 chr22 17980800 17980950 . 0 . 12 12.6 -1 -1 #> 8 chr22 18038260 18038410 . 0 . 29 36.0 -1 -1 #> 9 chr22 18225280 18225430 . 0 . 21 25.0 -1 -1 #> 10 chr22 18268020 18268170 . 0 . 14 13.0 -1 -1 #> # ℹ 560 more rows read_broadpeak(valr_example(\"sample.broadPeak.gz\")) #> # A tibble: 1,181 × 9 #> chrom start end name score strand signal pvalue qvalue #> #> 1 chr22 16847903 16848440 . 503 . 10.5 2.5 -1 #> 2 chr22 16849452 16851326 . 483 . 9.81 15.7 -1 #> 3 chr22 16849955 16850086 . 1000 . 32.4 4.2 -1 #> 4 chr22 16850694 16850924 . 831 . 22.5 4.9 -1 #> 5 chr22 16852964 16853782 . 499 . 10.4 6.2 -1 #> 6 chr22 16855065 16855803 . 477 . 9.58 3.9 -1 #> 7 chr22 16855944 16856974 . 491 . 10.1 8.5 -1 #> 8 chr22 16857425 16857958 . 505 . 10.6 2.5 -1 #> 9 chr22 16858284 16858824 . 549 . 12.2 4.5 -1 #> 10 chr22 16859972 16862024 . 404 . 6.89 9.3 -1 #> # ℹ 1,171 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/read_bigwig.html","id":null,"dir":"Reference","previous_headings":"","what":"Import and convert a bigwig file into a valr compatible tbl — read_bigwig","title":"Import and convert a bigwig file into a valr compatible tbl — read_bigwig","text":"function output 5 column tibble zero-based chrom, start, end, score, strand columns.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_bigwig.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Import and convert a bigwig file into a valr compatible tbl — read_bigwig","text":"","code":"read_bigwig(path, set_strand = \"+\")"},{"path":"https://rnabioco.github.io/valr/dev/reference/read_bigwig.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Import and convert a bigwig file into a valr compatible tbl — read_bigwig","text":"path path bigWig file set_strand strand add output (defaults \"+\")","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_bigwig.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Import and convert a bigwig file into a valr compatible tbl — read_bigwig","text":"functions uses rtracklayer import bigwigs unstable support windows platform therefore may error windows users (particularly 32 bit window users).","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_bigwig.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Import and convert a bigwig file into a valr compatible tbl — read_bigwig","text":"","code":"if (FALSE) { if (.Platform$OS.type != \"windows\") { bw <- read_bigwig(valr_example(\"hg19.dnase1.bw\")) head(bw) } }"},{"path":"https://rnabioco.github.io/valr/dev/reference/read_genome.html","id":null,"dir":"Reference","previous_headings":"","what":"Read genome files. — read_genome","title":"Read genome files. — read_genome","text":"Genome files (UCSC \"chromSize\" files) contain chromosome name size information. sizes used downstream functions identify computed intervals coordinates outside genome bounds.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_genome.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Read genome files. — read_genome","text":"","code":"read_genome(path)"},{"path":"https://rnabioco.github.io/valr/dev/reference/read_genome.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Read genome files. — read_genome","text":"path containing chrom/contig names sizes, one-pair-per-line, tab-delimited","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_genome.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Read genome files. — read_genome","text":"genome_df, sorted size","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_genome.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Read genome files. — read_genome","text":"URLs genome files can also used.","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/read_genome.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Read genome files. — read_genome","text":"","code":"read_genome(valr_example(\"hg19.chrom.sizes.gz\")) #> # A tibble: 25 × 2 #> chrom size #> #> 1 chr1 249250621 #> 2 chr2 243199373 #> 3 chr3 198022430 #> 4 chr4 191154276 #> 5 chr5 180915260 #> 6 chr6 171115067 #> 7 chr7 159138663 #> 8 chrX 155270560 #> 9 chr8 146364022 #> 10 chr9 141213431 #> # ℹ 15 more rows if (FALSE) { # `read_genome` accepts a URL read_genome(\"https://genome.ucsc.edu/goldenpath/help/hg19.chrom.sizes\") }"},{"path":"https://rnabioco.github.io/valr/dev/reference/read_gtf.html","id":null,"dir":"Reference","previous_headings":"","what":"Import and convert a GTF/GFF file into a valr compatible bed tbl format — read_gtf","title":"Import and convert a GTF/GFF file into a valr compatible bed tbl format — read_gtf","text":"function output tibble required chrom, start, end columns, well columns depending content GTF/GFF file.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_gtf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Import and convert a GTF/GFF file into a valr compatible bed tbl format — read_gtf","text":"","code":"read_gtf(path, zero_based = TRUE)"},{"path":"https://rnabioco.github.io/valr/dev/reference/read_gtf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Import and convert a GTF/GFF file into a valr compatible bed tbl format — read_gtf","text":"path path gtf gff file zero_based TRUE, convert zero based","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_gtf.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Import and convert a GTF/GFF file into a valr compatible bed tbl format — read_gtf","text":"","code":"gtf <- read_gtf(valr_example(\"hg19.gencode.gtf.gz\")) head(gtf) #> # A tibble: 6 × 26 #> chrom start end width strand source type score phase gene_id #> #> 1 chr2 43449540 43453748 4208 - HAVANA gene NA NA ENSG00… #> 2 chr2 43449540 43453748 4208 - HAVANA transcr… NA NA ENSG00… #> 3 chr2 43453403 43453748 345 - HAVANA exon NA NA ENSG00… #> 4 chr2 43453403 43453454 51 - HAVANA CDS NA 0 ENSG00… #> 5 chr2 43453451 43453454 3 - HAVANA start_c… NA 0 ENSG00… #> 6 chr2 43449540 43452891 3351 - HAVANA exon NA NA ENSG00… #> # ℹ 16 more variables: transcript_id , gene_type , #> # gene_status , gene_name , transcript_type , #> # transcript_status , transcript_name , level , #> # havana_gene , protein_id , tag , ccdsid , #> # havana_transcript , exon_number , exon_id , ont "},{"path":"https://rnabioco.github.io/valr/dev/reference/read_vcf.html","id":null,"dir":"Reference","previous_headings":"","what":"Read a VCF file. — read_vcf","title":"Read a VCF file. — read_vcf","text":"Read VCF file.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_vcf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Read a VCF file. — read_vcf","text":"","code":"read_vcf(vcf)"},{"path":"https://rnabioco.github.io/valr/dev/reference/read_vcf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Read a VCF file. — read_vcf","text":"vcf vcf filename","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_vcf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Read a VCF file. — read_vcf","text":"data_frame","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_vcf.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Read a VCF file. — read_vcf","text":"return value chrom, start end columns. Interval lengths size 'REF' field.","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/read_vcf.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Read a VCF file. — read_vcf","text":"","code":"vcf_file <- valr_example(\"test.vcf.gz\") read_vcf(vcf_file) #> # A tibble: 11 × 18 #> CHROM POS ID REF ALT QUAL FILTER INFO FORMAT X1 X2 #> #> 1 1 10 1:10 A T 100 PASS NS=5;A… GT 0/0 ./. #> 2 1 20 1:20 G C 100 PASS NS=0;A… GT ./. ./. #> 3 1 30 1:30 C A 100 PASS NS=6;A… GT 0/0 0/0 #> 4 1 40 1:40 A C 100 PASS NS=6;A… GT 0/0 0/0 #> 5 1 10000 1:10000 G C 100 PASS NS=6;A… GT 0/0 0/0 #> 6 1 20000 1:20000 T A 100 PASS NS=6;A… GT 1/1 1/1 #> 7 4 5000 4:5000 A T 100 PASS NS=6;A… GT 1/1 1/1 #> 8 4 6000 4:6000 C T 100 PASS NS=6;A… GT 1/1 1/1 #> 9 X 800 X:800 A C 100 PASS NS=6;A… GT 1/1 1/1 #> 10 X 900 X:900 A T 100 PASS NS=6;A… GT 1/1 1/1 #> 11 X 1000 X:1000 T G 100 PASS NS=5;A… GT 1/1 1/1 #> # ℹ 7 more variables: X3 , X4 , X5 , X6 , #> # chrom , start , end "},{"path":"https://rnabioco.github.io/valr/dev/reference/valr.html","id":null,"dir":"Reference","previous_headings":"","what":"valr: genome interval arithmetic in R — valr","title":"valr: genome interval arithmetic in R — valr","text":"valr provides tools read manipulate intervals signals genome reference. valr developed facilitate interactive analysis genome-scale data sets, leveraging power dplyr piping.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/valr.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"valr: genome interval arithmetic in R — valr","text":"learn valr, start vignette: browseVignettes(package = \"valr\")","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/valr.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"valr: genome interval arithmetic in R — valr","text":"Jay Hesselberth jay.hesselberth@gmail.com Kent Riemondy kent.riemondy@gmail.com","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/valr_example.html","id":null,"dir":"Reference","previous_headings":"","what":"Provide working directory for valr example files. — valr_example","title":"Provide working directory for valr example files. — valr_example","text":"Provide working directory valr example files.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/valr_example.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Provide working directory for valr example files. — valr_example","text":"","code":"valr_example(path)"},{"path":"https://rnabioco.github.io/valr/dev/reference/valr_example.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Provide working directory for valr example files. — valr_example","text":"path path file","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/valr_example.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Provide working directory for valr example files. — valr_example","text":"","code":"valr_example(\"hg19.chrom.sizes.gz\") #> [1] \"/home/runner/work/_temp/Library/valr/extdata/hg19.chrom.sizes.gz\""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-080","dir":"Changelog","previous_headings":"","what":"valr 0.8.0","title":"valr 0.8.0","text":"Added bed_genomecov() compute interval coverage across genome.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-070","dir":"Changelog","previous_headings":"","what":"valr 0.7.0","title":"valr 0.7.0","text":"CRAN release: 2023-09-18 read_bed related functions now automatically calculate fields. Use n_fields deprecated.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-068","dir":"Changelog","previous_headings":"","what":"valr 0.6.8","title":"valr 0.6.8","text":"CRAN release: 2023-05-16 bed_closest() now reports x intervals, even closest y intervals (e.g. matching chromosome y intervals). intervals returned populated NA .overlap, .dist y interval locations. Reimplemented bed_closest() use binary search rather interval tree search. closest y interval can missed previous search strategy high depth interval trees. Fix one error using max_dist argument bed_cluster() (#401).","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-067","dir":"Changelog","previous_headings":"","what":"valr 0.6.7","title":"valr 0.6.7","text":"CRAN release: 2023-02-18 Removed SystemRequirements DESCRIPTION eliminate NOTE CRAN. bed_coverage() now reports intervals x matching group y (#395).","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-066","dir":"Changelog","previous_headings":"","what":"valr 0.6.6","title":"valr 0.6.6","text":"CRAN release: 2022-10-11 Updated intervalTree header commit f0c4046 valr now uses cli consistent errors messages interactive use. deprecated genome argument bed_makewindows() removed.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-065","dir":"Changelog","previous_headings":"","what":"valr 0.6.5","title":"valr 0.6.5","text":"CRAN release: 2022-08-19 Handle max_dist first intervals bed_cluster() (#388)","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-064","dir":"Changelog","previous_headings":"","what":"valr 0.6.4","title":"valr 0.6.4","text":"CRAN release: 2021-12-08 Fixed intron score numbering error create_introns (#377 @sheridar) Fixed bug handling list inputs bed_intersect()(#380 @sheridar) Added read_bigwig read_gtf functions import data valr compatible tibbles (#379) Kent Riemondy now maintainer.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-063","dir":"Changelog","previous_headings":"","what":"valr 0.6.3","title":"valr 0.6.3","text":"CRAN release: 2021-05-15 Update prepare readr 2.0.0","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-062","dir":"Changelog","previous_headings":"","what":"valr 0.6.2","title":"valr 0.6.2","text":"CRAN release: 2020-10-07","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"minor-changes-0-6-2","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"valr 0.6.2","text":"RMariaDB replaced deprecated RMySQL package database backend. valr now imports Rcpp, always case, masked Import readr, recently dropped use Rcpp.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-061","dir":"Changelog","previous_headings":"","what":"valr 0.6.1","title":"valr 0.6.1","text":"CRAN release: 2020-05-08","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"bug-fixes-0-6-1","dir":"Changelog","previous_headings":"","what":"Bug Fixes","title":"valr 0.6.1","text":"Fixed rchk unprotect error (#365)","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-060","dir":"Changelog","previous_headings":"","what":"valr 0.6.0","title":"valr 0.6.0","text":"CRAN release: 2020-05-04","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"major-changes-0-6-0","dir":"Changelog","previous_headings":"","what":"Major changes","title":"valr 0.6.0","text":"trbl_interval() trbl_genome() custom tibble subclasses deemed unnecessary removed package. coercing GRanges valr compatible data.frame now uses gr_to_bed() function rather .trbl_interal() methods.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"minor-changes-0-6-0","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"valr 0.6.0","text":"dplyr version < 0.8.0 longer supported due unnecessary code bloat challenges handling multiple grouping structures (#359). sort_by argument bed_random() changed sorted, now default use bed_sort() sort output, rather rely naming sorting columns. Sorting can suppressed using sorted = FALSE. bed_sort() now uses base R sorting radix method increased speed. (#353) tbls processed bed_merge()bed_sort() longer store either merged sorted attributes, due attributes rarely checked codebase potential sources unexpected behavior.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"bug-fixes-0-6-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"valr 0.6.0","text":"Fixed bed_closest() prevent erroneous intervals reported adjacent closest intervals present y table. (#348) Factor columns used grouping returned factors rather inappropriately coerced integer vectors (#360)","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-050","dir":"Changelog","previous_headings":"","what":"valr 0.5.0","title":"valr 0.5.0","text":"CRAN release: 2019-01-03","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"major-changes-0-5-0","dir":"Changelog","previous_headings":"","what":"Major changes","title":"valr 0.5.0","text":"Internal Rcpp functions reorganized remove dependencies dplyr C++ functions.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"minor-changes-0-5-0","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"valr 0.5.0","text":"Due internal refactoring Rcpp functions, data.frames containing Numeric, Logical, Integer, Character, List column types supported. Columns containing Raw, Complex, R classes supported issue error. Factors now disallowed grouping variables multiset operations avoid sort order discrepancies, compatibility factor handling dplyr v.0.8.0. Factors now internally type-converted character warning issued.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-042","dir":"Changelog","previous_headings":"","what":"valr 0.4.2","title":"valr 0.4.2","text":"CRAN release: 2018-11-17","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"bug-fixes-0-4-2","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"valr 0.4.2","text":"Changed behavior .tbl_interval() call as_tibble() non-tibble input, prevents groups stripped tibble() input (#338).","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-041","dir":"Changelog","previous_headings":"","what":"valr 0.4.1","title":"valr 0.4.1","text":"CRAN release: 2018-06-08 Added new function, bed_partition(), similar bed_merge() collapses intervals elemental intervals rather maximal overlapping region. bed_partition() also can compute summaries data overlapping intervals. See examples bed_partition() timings vignette('benchmarks') @kriemo. Several explicit comparisons Bioconductor GenomicRanges library included users considering using valr. See examples .tbl_interval() timings vignette('benchmarks').","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-040","dir":"Changelog","previous_headings":"","what":"valr 0.4.0","title":"valr 0.4.0","text":"CRAN release: 2018-01-25","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"minor-changes-0-4-0","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"valr 0.4.0","text":"relevant tests bedtool2 ported valr. Bugs identified corner cases new tests fixed (#328 @raysinesis) bed_jaccard() now works grouped inputs (#216) Update dplyr header files v0.7 bed_intersect() internal intersect_impl refactored enable return non-intersecting intervals. genome argument bed_makewindows() deprecated produce warning used. Also error handling added check warn intervals smaller requested window size makewindows_impl() (#312 @kriemo)","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"bug-fixes-0-4-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"valr 0.4.0","text":"Fixed one error reported distances bed_closest(). Distances reported now bedtools closest behavior (#311). bed_glyph() accepts trbl_intervals named x y (#318). bed_makewindows() now returns number windows specified num_win input intervals evenly divisble num_win, consistent bedtools behavior. output findOverlaps() now sorted subtract_impl() prevent reporting intervals dropped calling bed_subtract() (#316 @kriemo)","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-031","dir":"Changelog","previous_headings":"","what":"valr 0.3.1","title":"valr 0.3.1","text":"CRAN release: 2017-07-22","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"enhancements-0-3-1","dir":"Changelog","previous_headings":"","what":"Enhancements","title":"valr 0.3.1","text":"manuscript describing valr published F1000Research. New S3 generic .tbl_interval() converts GenomicRanges::GRanges objects tbl_interval. New create_tss() creating transcription start sites. Improve documentation interval statistics complex examples.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"minor-changes-0-3-1","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"valr 0.3.1","text":"bed_sort() de-deprecated reduce arrange calls library code.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"bug-fixes-0-3-1","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"valr 0.3.1","text":"bed_merge() now reports start/end columns spec provided (#288)","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-030","dir":"Changelog","previous_headings":"","what":"valr 0.3.0","title":"valr 0.3.0","text":"CRAN release: 2017-06-15","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"enhancements-0-3-0","dir":"Changelog","previous_headings":"","what":"Enhancements","title":"valr 0.3.0","text":"New create_introns(), create_utrs5() create_utrs3() functions generating features BED12 files. Speed-ups bed_makewindows() (~50x), bed_merge() (~4x), bed_flank() (~4x) (thanks @kriemo @sheridar). Thanks sponsors Biofrontiers Hackathon caffeine underlying improvements.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"bug-fixes-0-3-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"valr 0.3.0","text":"intervals bed_random() now sorted properly.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-020","dir":"Changelog","previous_headings":"","what":"valr 0.2.0","title":"valr 0.2.0","text":"CRAN release: 2017-05-05","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"major-changes-0-2-0","dir":"Changelog","previous_headings":"","what":"Major changes","title":"valr 0.2.0","text":"Package dplyr v0.5.0 headers valr remove dplyr LinkingTo dependency. bed_intersect() now accepts multiple tbls intersection (#220 @kriemo). new tbl_interval() tbl_genome() wrap tibbles enforce strict column naming. trbl_interval() trbl_genome() constructors take tibble::tribble() formatting .tbl_interval() .tbl_genome() used check valid classes.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"minor-changes-0-2-0","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"valr 0.2.0","text":"intervals returned bed_random() sorted chrom start default.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"bug-fixes-0-2-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"valr 0.2.0","text":"Merge intervals bed_jaccard() use numeric values calculation (fixes #204).","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-012","dir":"Changelog","previous_headings":"","what":"valr 0.1.2","title":"valr 0.1.2","text":"CRAN release: 2017-03-16","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"major-changes-0-1-2","dir":"Changelog","previous_headings":"","what":"Major changes","title":"valr 0.1.2","text":"Deprecate bed_sort() favor using dplyr::arrange() explicitly (fixes #134).","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"minor-changes-0-1-2","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"valr 0.1.2","text":"add src/init.c calls R_registerRoutines R_useDynamicSymbols address NOTE r-devel Deprecate dist parameter bed_closest() favor using user supplied functions (#182 @kriemo) Make .id values sequential across chroms bed_cluster() output (#171) Transfer repository http://github.com/rnabioco/valr, update links docs. Move shiny app new repo (http://github.com/rnabioco/valrdata). Add Kent Riemondy LICENSE file.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"bug-fixes-0-1-2","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"valr 0.1.2","text":"bed_merge() now merges contained intervals (#177)","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-011","dir":"Changelog","previous_headings":"","what":"valr 0.1.1","title":"valr 0.1.1","text":"CRAN release: 2016-12-01","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"minor-changes-0-1-1","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"valr 0.1.1","text":"test / vignette guards Suggested RMySQL fixed memory leak absdist.cpp fixed vignette entry names","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-010","dir":"Changelog","previous_headings":"","what":"valr 0.1.0","title":"valr 0.1.0","text":"CRAN release: 2016-11-21","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"major-changes-0-1-0","dir":"Changelog","previous_headings":"","what":"Major changes","title":"valr 0.1.0","text":"initial release CRAN","code":""}] +[{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"members, contributors, leaders pledge make participation community harassment-free experience everyone, regardless age, body size, visible invisible disability, ethnicity, sex characteristics, gender identity expression, level experience, education, socio-economic status, nationality, personal appearance, race, religion, sexual identity orientation. pledge act interact ways contribute open, welcoming, diverse, inclusive, healthy community.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behavior contributes positive environment community include: Demonstrating empathy kindness toward people respectful differing opinions, viewpoints, experiences Giving gracefully accepting constructive feedback Accepting responsibility apologizing affected mistakes, learning experience Focusing best just us individuals, overall community Examples unacceptable behavior include: use sexualized language imagery, sexual attention advances kind Trolling, insulting derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical email address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"https://rnabioco.github.io/valr/dev/CODE_OF_CONDUCT.html","id":"enforcement-responsibilities","dir":"","previous_headings":"","what":"Enforcement Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Community leaders responsible clarifying enforcing standards acceptable behavior take appropriate fair corrective action response behavior deem inappropriate, threatening, offensive, harmful. Community leaders right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, communicate reasons moderation decisions appropriate.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within community spaces, also applies individual officially representing community public spaces. Examples representing community include using official e-mail address, posting via official social media account, acting appointed representative online offline event.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported community leaders responsible enforcement [INSERT CONTACT METHOD]. complaints reviewed investigated promptly fairly. community leaders obligated respect privacy security reporter incident.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CODE_OF_CONDUCT.html","id":"enforcement-guidelines","dir":"","previous_headings":"","what":"Enforcement Guidelines","title":"Contributor Covenant Code of Conduct","text":"Community leaders follow Community Impact Guidelines determining consequences action deem violation Code Conduct:","code":""},{"path":"https://rnabioco.github.io/valr/dev/CODE_OF_CONDUCT.html","id":"id_1-correction","dir":"","previous_headings":"Enforcement Guidelines","what":"1. Correction","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Use inappropriate language behavior deemed unprofessional unwelcome community. Consequence: private, written warning community leaders, providing clarity around nature violation explanation behavior inappropriate. public apology may requested.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CODE_OF_CONDUCT.html","id":"id_2-warning","dir":"","previous_headings":"Enforcement Guidelines","what":"2. Warning","title":"Contributor Covenant Code of Conduct","text":"Community Impact: violation single incident series actions. Consequence: warning consequences continued behavior. interaction people involved, including unsolicited interaction enforcing Code Conduct, specified period time. includes avoiding interactions community spaces well external channels like social media. Violating terms may lead temporary permanent ban.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CODE_OF_CONDUCT.html","id":"id_3-temporary-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"3. Temporary Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: serious violation community standards, including sustained inappropriate behavior. Consequence: temporary ban sort interaction public communication community specified period time. public private interaction people involved, including unsolicited interaction enforcing Code Conduct, allowed period. Violating terms may lead permanent ban.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CODE_OF_CONDUCT.html","id":"id_4-permanent-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"4. Permanent Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Demonstrating pattern violation community standards, including sustained inappropriate behavior, harassment individual, aggression toward disparagement classes individuals. Consequence: permanent ban sort public interaction within community.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 2.0, available https://www.contributor-covenant.org/version/2/0/ code_of_conduct.html. Community Impact Guidelines inspired Mozilla’s code conduct enforcement ladder. answers common questions code conduct, see FAQ https://www.contributor-covenant.org/faq. Translations available https:// www.contributor-covenant.org/translations.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CONTRIBUTING.html","id":null,"dir":"","previous_headings":"","what":"Contributing to valr","title":"Contributing to valr","text":"outlines propose change valr. detailed info contributing , tidyverse packages, please see development contributing guide.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CONTRIBUTING.html","id":"fixing-typos","dir":"","previous_headings":"","what":"Fixing typos","title":"Contributing to valr","text":"can fix typos, spelling mistakes, grammatical errors documentation directly using GitHub web interface, long changes made source file. generally means ’ll need edit roxygen2 comments .R, .Rd file. can find .R file generates .Rd reading comment first line.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CONTRIBUTING.html","id":"bigger-changes","dir":"","previous_headings":"","what":"Bigger changes","title":"Contributing to valr","text":"want make bigger change, ’s good idea first file issue make sure someone team agrees ’s needed. ’ve found bug, please file issue illustrates bug minimal reprex (also help write unit test, needed).","code":""},{"path":"https://rnabioco.github.io/valr/dev/CONTRIBUTING.html","id":"pull-request-process","dir":"","previous_headings":"Bigger changes","what":"Pull request process","title":"Contributing to valr","text":"Fork package clone onto computer. haven’t done , recommend using usethis::create_from_github(\"rnabioco/valr\", fork = TRUE). Install development dependences devtools::install_dev_deps(), make sure package passes R CMD check running devtools::check(). R CMD check doesn’t pass cleanly, ’s good idea ask help continuing. Create Git branch pull request (PR). recommend using usethis::pr_init(\"brief-description--change\"). Make changes, commit git, create PR running usethis::pr_push(), following prompts browser. title PR briefly describe change. body PR contain Fixes #issue-number. user-facing changes, add bullet top NEWS.md (.e. just first header). Follow style described https://style.tidyverse.org/news.html.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CONTRIBUTING.html","id":"code-style","dir":"","previous_headings":"Bigger changes","what":"Code style","title":"Contributing to valr","text":"New code follow tidyverse style guide. can use styler package apply styles, please don’t restyle code nothing PR. use roxygen2, Markdown syntax, documentation. use testthat unit tests. Contributions test cases included easier accept.","code":""},{"path":"https://rnabioco.github.io/valr/dev/CONTRIBUTING.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"Contributing to valr","text":"Please note valr project released Contributor Code Conduct. contributing project agree abide terms.","code":""},{"path":"https://rnabioco.github.io/valr/dev/LICENSE.html","id":null,"dir":"","previous_headings":"","what":"MIT License","title":"MIT License","text":"Copyright (c) 2016-2018 Jay R Hesselberth Kent Riemondy Permission hereby granted, free charge, person obtaining copy software associated documentation files (“Software”), deal Software without restriction, including without limitation rights use, copy, modify, merge, publish, distribute, sublicense, /sell copies Software, permit persons Software furnished , subject following conditions: copyright notice permission notice shall included copies substantial portions Software. SOFTWARE PROVIDED “”, WITHOUT WARRANTY KIND, EXPRESS IMPLIED, INCLUDING LIMITED WARRANTIES MERCHANTABILITY, FITNESS PARTICULAR PURPOSE NONINFRINGEMENT. EVENT SHALL AUTHORS COPYRIGHT HOLDERS LIABLE CLAIM, DAMAGES LIABILITY, WHETHER ACTION CONTRACT, TORT OTHERWISE, ARISING , CONNECTION SOFTWARE USE DEALINGS SOFTWARE.","code":""},{"path":"https://rnabioco.github.io/valr/dev/articles/interval-stats.html","id":"overview","dir":"Articles","previous_headings":"","what":"Overview","title":"Interval statistics","text":"valr includes several functions exploring statistical relationships sets intervals. Calculate significance overlaps sets intervals bed_fisher() bed_projection(). Quantify relative absolute distances sets intervals bed_reldist() bed_absdist(). Quantify extent overlap sets intervals bed_jaccard(). vignette explore relationship transcription start sites repetitive elements human genome.","code":"library(valr) library(dplyr) library(ggplot2) library(cowplot) library(tidyr) # load repeats and genes. Data in the valr package is restricted to chr22; the entire # files can be downloaded from UCSC. rpts <- read_bed(valr_example(\"hg19.rmsk.chr22.bed.gz\")) genes <- read_bed12(valr_example(\"hg19.refGene.chr22.bed.gz\")) # load chrom sizes genome <- read_genome(valr_example(\"hg19.chrom.sizes.gz\")) # create 1 bp intervals representing transcription start sites tss <- create_tss(genes) tss #> # A tibble: 1,267 × 6 #> chrom start end name score strand #> #> 1 chr22 16193008 16193009 NR_122113 0 - #> 2 chr22 16157078 16157079 NR_133911 0 + #> 3 chr22 16162065 16162066 NR_073459 0 + #> 4 chr22 16162065 16162066 NR_073460 0 + #> 5 chr22 16231288 16231289 NR_132385 0 - #> 6 chr22 16287936 16287937 NM_001136213 0 - #> 7 chr22 16274608 16274609 NR_046571 0 + #> 8 chr22 16449803 16449804 NM_001005239 0 - #> 9 chr22 17073699 17073700 NM_014406 0 - #> 10 chr22 17082800 17082801 NR_001591 0 + #> # ℹ 1,257 more rows"},{"path":"https://rnabioco.github.io/valr/dev/articles/interval-stats.html","id":"distance-metrics","dir":"Articles","previous_headings":"","what":"Distance metrics","title":"Interval statistics","text":"First define function takes x y intervals computes distance statistics (using bed_reldist() bed_absdist()) specified groups. value statistic assigned .value column. use distance_stats() function apply bed_absdist() function group data. done set shuffled group data. bed_shuffle() used shuffle coordinates repeats within chromosome (.e., coordinates change, chromosome stays .) Now can bind observed shuffled data together, tidying put data format appropriate statistical test. involves: unnest()ing data frames creating groups repeat (name), stat (reldist absdist) type (obs shf) adding unique surrogate row numbers group using tidyr::pivot_wider() create two new obs shuf columns removing rows NA values. Now data formatted, can use non-parametric ks.test() determine whether significant differences observed shuffled data group. broom::tidy() used reformat results test tibble, results test pivoted type column test type. Histgrams different stats help visualize distribution p.values. can also assess false discovery rates (q.values) using p.adjust(). Finally can visualize results using stat_ecdf().","code":"distance_stats <- function(x, y, genome, group_var, type = NA) { group_by(x, !!rlang::sym(group_var)) |> do( reldist = bed_reldist(., y, detail = TRUE) |> select(.value = .reldist), absdist = bed_absdist(., y, genome) |> select(.value = .absdist) ) |> tidyr::pivot_longer( cols = -name, names_to = \"stat\", values_to = \"value\" ) |> mutate(type = type) } obs_stats <- distance_stats(rpts, tss, genome, \"name\", \"obs\") obs_stats #> # A tibble: 2,106 × 4 #> name stat value type #> #> 1 (A)n reldist obs #> 2 (A)n absdist obs #> 3 (AAAAACA)n reldist obs #> 4 (AAAAACA)n absdist obs #> 5 (AAAAC)n reldist obs #> 6 (AAAAC)n absdist obs #> 7 (AAAAG)n reldist obs #> 8 (AAAAG)n absdist obs #> 9 (AAAAT)n reldist obs #> 10 (AAAAT)n absdist obs #> # ℹ 2,096 more rows shfs <- bed_shuffle(rpts, genome, within = TRUE) shf_stats <- distance_stats(shfs, tss, genome, \"name\", \"shuf\") res <- bind_rows(obs_stats, shf_stats) |> tidyr::unnest(value) |> group_by(name, stat, type) |> mutate(.id = row_number()) |> tidyr::pivot_wider( names_from = \"type\", values_from = \".value\" ) |> na.omit() res #> # A tibble: 16,712 × 5 #> # Groups: name, stat [1,908] #> name stat .id obs shuf #> #> 1 (A)n reldist 1 0.363 0.275 #> 2 (A)n reldist 2 0.429 0.0395 #> 3 (A)n reldist 3 0.246 0.151 #> 4 (A)n reldist 4 0.478 0.292 #> 5 (A)n reldist 5 0.260 0.431 #> 6 (A)n reldist 6 0.286 0.257 #> 7 (A)n reldist 7 0.498 0.310 #> 8 (A)n reldist 8 0.237 0.213 #> 9 (A)n reldist 9 0.314 0.104 #> 10 (A)n reldist 10 0.149 0.433 #> # ℹ 16,702 more rows library(broom) pvals <- res |> do( twosided = tidy(ks.test(.$obs, .$shuf)), less = tidy(ks.test(.$obs, .$shuf, alternative = \"less\")), greater = tidy(ks.test(.$obs, .$shuf, alternative = \"greater\")) ) |> tidyr::pivot_longer(cols = -c(name, stat), names_to = \"alt\", values_to = \"type\") |> unnest(type) |> select(name:p.value) |> arrange(p.value) ggplot(pvals, aes(p.value)) + geom_histogram(binwidth = 0.05) + facet_grid(stat ~ alt) + theme_cowplot() pvals <- group_by(pvals, stat, alt) |> mutate(q.value = p.adjust(p.value)) |> ungroup() |> arrange(q.value) res_gather <- tidyr::pivot_longer(res, cols = -c(name, stat, .id), names_to = \"type\", values_to = \"value\" ) signif <- head(pvals, 5) res_signif <- signif |> left_join(res_gather, by = c(\"name\", \"stat\")) #> Warning in left_join(signif, res_gather, by = c(\"name\", \"stat\")): Detected an unexpected many-to-many relationship between `x` and `y`. #> ℹ Row 1 of `x` matches multiple rows in `y`. #> ℹ Row 28931 of `y` matches multiple rows in `x`. #> ℹ If a many-to-many relationship is expected, set `relationship = #> \"many-to-many\"` to silence this warning. ggplot(res_signif, aes(x = value, color = type)) + stat_ecdf() + facet_grid(stat ~ name) + theme_cowplot() + scale_x_log10() + scale_color_brewer(palette = \"Set1\")"},{"path":"https://rnabioco.github.io/valr/dev/articles/interval-stats.html","id":"projection-test","dir":"Articles","previous_headings":"","what":"Projection test","title":"Interval statistics","text":"bed_projection() statistical approach assess relationship two intervals based binomial distribution. , examine distribution repetitive elements within promoters coding non-coding genes. First ’ll extract 5 kb regions upstream transcription start sites represent promoter regions coding non-coding genes. Next ’ll apply bed_projection() test repeat class coding non-coding regions. projection test two-tailed statistical test. significant p-value indicates either enrichment depletion query intervals compared reference interval sets. value lower_tail = TRUE column indicates query intervals depleted, whereas lower_tail = FALSE indicates query intervals enriched.","code":"# create intervals 5kb upstream of tss representing promoters promoters <- bed_flank(genes, genome, left = 5000, strand = TRUE) |> mutate(name = ifelse(grepl(\"NR_\", name), \"non-coding\", \"coding\")) |> select(chrom:strand) # select coding and non-coding promoters promoters_coding <- filter(promoters, name == \"coding\") promoters_ncoding <- filter(promoters, name == \"non-coding\") promoters_coding #> # A tibble: 973 × 6 #> chrom start end name score strand #> #> 1 chr22 16287937 16292937 coding 0 - #> 2 chr22 16449804 16454804 coding 0 - #> 3 chr22 17073700 17078700 coding 0 - #> 4 chr22 17302589 17307589 coding 0 - #> 5 chr22 17302589 17307589 coding 0 - #> 6 chr22 17489112 17494112 coding 0 - #> 7 chr22 17560848 17565848 coding 0 + #> 8 chr22 17560848 17565848 coding 0 + #> 9 chr22 17602213 17607213 coding 0 - #> 10 chr22 17602257 17607257 coding 0 - #> # ℹ 963 more rows promoters_ncoding #> # A tibble: 294 × 6 #> chrom start end name score strand #> #> 1 chr22 16152078 16157078 non-coding 0 + #> 2 chr22 16157065 16162065 non-coding 0 + #> 3 chr22 16157065 16162065 non-coding 0 + #> 4 chr22 16193009 16198009 non-coding 0 - #> 5 chr22 16231289 16236289 non-coding 0 - #> 6 chr22 16269608 16274608 non-coding 0 + #> 7 chr22 17077800 17082800 non-coding 0 + #> 8 chr22 17156430 17161430 non-coding 0 - #> 9 chr22 17229328 17234328 non-coding 0 - #> 10 chr22 17303363 17308363 non-coding 0 + #> # ℹ 284 more rows # function to apply bed_projection to groups projection_stats <- function(x, y, genome, group_var, type = NA) { group_by(x, !!rlang::sym(group_var)) |> do( n_repeats = nrow(.), projection = bed_projection(., y, genome) ) |> mutate(type = type) } pvals_coding <- projection_stats(rpts, promoters_coding, genome, \"name\", \"coding\") pvals_ncoding <- projection_stats(rpts, promoters_ncoding, genome, \"name\", \"non_coding\") pvals <- bind_rows(pvals_ncoding, pvals_coding) |> ungroup() |> tidyr::unnest(cols = c(n_repeats, projection)) |> select(-chrom) # filter for repeat classes with at least 10 intervals pvals <- filter( pvals, n_repeats > 10, obs_exp_ratio != 0 ) # adjust pvalues pvals <- mutate(pvals, q.value = p.adjust(p.value)) pvals #> # A tibble: 179 × 7 #> name n_repeats p.value obs_exp_ratio lower_tail type q.value #> #> 1 (A)n 28 0.00353 4.72 FALSE non_coding 0.558 #> 2 (AT)n 48 0.298 0.917 FALSE non_coding 1 #> 3 (CA)n 31 0.156 1.42 FALSE non_coding 1 #> 4 (GT)n 42 0.247 1.05 FALSE non_coding 1 #> 5 (T)n 61 0.405 0.721 FALSE non_coding 1 #> 6 (TG)n 40 0.0622 2.20 FALSE non_coding 1 #> 7 A-rich 54 0.348 0.815 FALSE non_coding 1 #> 8 Alu 15 0.0446 2.93 FALSE non_coding 1 #> 9 AluJb 271 0.0225 1.79 FALSE non_coding 1 #> 10 AluJo 208 0.0216 1.90 FALSE non_coding 1 #> # ℹ 169 more rows library(DT) # find and show top 5 most significant repeats signif_tests <- pvals |> arrange(q.value) |> group_by(type) |> top_n(-5, q.value) |> arrange(type) DT::datatable(signif_tests)"},{"path":"https://rnabioco.github.io/valr/dev/articles/valr.html","id":"familiar-tools-natively-in-r","dir":"Articles","previous_headings":"","what":"Familiar tools, natively in R","title":"valr overview","text":"functions valr similar names BEDtools counterparts, familiar users coming BEDtools suite. Similar pybedtools, valr terse syntax:","code":"library(valr) library(dplyr) snps <- read_bed(valr_example(\"hg19.snps147.chr22.bed.gz\")) genes <- read_bed(valr_example(\"genes.hg19.chr22.bed.gz\")) # find snps in intergenic regions intergenic <- bed_subtract(snps, genes) # distance from intergenic snps to nearest gene nearby <- bed_closest(intergenic, genes) nearby |> select(starts_with(\"name\"), .overlap, .dist) |> filter(abs(.dist) < 1000) #> # A tibble: 285 × 4 #> name.x name.y .overlap .dist #> #> 1 rs2261631 P704P 0 -268 #> 2 rs570770556 POTEH 0 -913 #> 3 rs538163832 POTEH 0 -953 #> 4 rs9606135 TPTEP1 0 -422 #> 5 rs11912392 ANKRD62P1-PARP4P3 0 105 #> 6 rs8136454 BC038197 0 356 #> 7 rs5992556 XKR3 0 -456 #> 8 rs114101676 GAB4 0 474 #> 9 rs62236167 CECR7 0 262 #> 10 rs5747023 CECR1 0 -387 #> # ℹ 275 more rows"},{"path":"https://rnabioco.github.io/valr/dev/articles/valr.html","id":"input-data","dir":"Articles","previous_headings":"","what":"Input data","title":"valr overview","text":"valr assigns common column names facilitate comparisons tbls. tbls chrom, start, end columns, tbls multi-column formats additional pre-determined column names. See read_bed() documentation details. valr can also operate BED-like data.frames already constructed R, provided columns named chrom, start end present. New tbls can also constructed either tibbles base R data.frames.","code":"bed_file <- valr_example(\"3fields.bed.gz\") read_bed(bed_file) # accepts filepaths or URLs #> # A tibble: 10 × 3 #> chrom start end #> #> 1 chr1 11873 14409 #> 2 chr1 14361 19759 #> 3 chr1 14406 29370 #> 4 chr1 34610 36081 #> 5 chr1 69090 70008 #> 6 chr1 134772 140566 #> 7 chr1 321083 321115 #> 8 chr1 321145 321207 #> 9 chr1 322036 326938 #> 10 chr1 327545 328439 bed <- tribble( ~chrom, ~start, ~end, \"chr1\", 1657492, 2657492, \"chr2\", 2501324, 3094650 ) bed #> # A tibble: 2 × 3 #> chrom start end #> #> 1 chr1 1657492 2657492 #> 2 chr2 2501324 3094650"},{"path":"https://rnabioco.github.io/valr/dev/articles/valr.html","id":"interval-coordinates","dir":"Articles","previous_headings":"","what":"Interval coordinates","title":"valr overview","text":"valr adheres BED format specifies start position interval zero based end position one-based. first position chromosome 0. end position chromosome one position passed last base, included interval. example:","code":"# a chromosome 100 basepairs in length chrom <- tribble( ~chrom, ~start, ~end, \"chr1\", 0, 100 ) chrom #> # A tibble: 1 × 3 #> chrom start end #> #> 1 chr1 0 100 # single base-pair intervals bases <- tribble( ~chrom, ~start, ~end, \"chr1\", 0, 1, # first base of chromosome \"chr1\", 1, 2, # second base of chromosome \"chr1\", 99, 100 # last base of chromosome ) bases #> # A tibble: 3 × 3 #> chrom start end #> #> 1 chr1 0 1 #> 2 chr1 1 2 #> 3 chr1 99 100"},{"path":"https://rnabioco.github.io/valr/dev/articles/valr.html","id":"remote-databases","dir":"Articles","previous_headings":"","what":"Remote databases","title":"valr overview","text":"Remote databases can accessed db_ucsc() (access UCSC Browser) db_ensembl() (access Ensembl databases).","code":"# access the `refGene` tbl on the `hg38` assembly. if (require(RMariaDB)) { ucsc <- db_ucsc(\"hg38\") tbl(ucsc, \"refGene\") }"},{"path":"https://rnabioco.github.io/valr/dev/articles/valr.html","id":"visual-documentation","dir":"Articles","previous_headings":"","what":"Visual documentation","title":"valr overview","text":"bed_glyph() tool illustrates results operations valr, similar found BEDtools documentation. glyph shows result intersecting x y intervals bed_intersect(): glyph illustrates bed_merge():","code":"x <- tribble( ~chrom, ~start, ~end, \"chr1\", 25, 50, \"chr1\", 100, 125 ) y <- tribble( ~chrom, ~start, ~end, \"chr1\", 30, 75 ) bed_glyph(bed_intersect(x, y)) x <- tribble( ~chrom, ~start, ~end, \"chr1\", 1, 50, \"chr1\", 10, 75, \"chr1\", 100, 120 ) bed_glyph(bed_merge(x))"},{"path":"https://rnabioco.github.io/valr/dev/articles/valr.html","id":"grouping-data","dir":"Articles","previous_headings":"","what":"Grouping data","title":"valr overview","text":"group_by function dplyr can used perform functions subsets single multiple data_frames. Functions valr leverage grouping enable variety comparisons. example, intervals can grouped strand perform comparisons among intervals strand. Comparisons intervals opposite strands done using flip_strands() function: single set (e.g. bed_merge()) multi set operations respect groupings input intervals.","code":"x <- tribble( ~chrom, ~start, ~end, ~strand, \"chr1\", 1, 100, \"+\", \"chr1\", 50, 150, \"+\", \"chr2\", 100, 200, \"-\" ) y <- tribble( ~chrom, ~start, ~end, ~strand, \"chr1\", 50, 125, \"+\", \"chr1\", 50, 150, \"-\", \"chr2\", 50, 150, \"+\" ) # intersect tbls by strand x <- group_by(x, strand) y <- group_by(y, strand) bed_intersect(x, y) #> # A tibble: 2 × 8 #> chrom start.x end.x strand.x start.y end.y strand.y .overlap #> #> 1 chr1 1 100 + 50 125 + 50 #> 2 chr1 50 150 + 50 125 + 75 x <- group_by(x, strand) y <- flip_strands(y) y <- group_by(y, strand) bed_intersect(x, y) #> # A tibble: 3 × 8 #> chrom start.x end.x strand.x start.y end.y strand.y .overlap #> #> 1 chr1 1 100 + 50 150 + 50 #> 2 chr1 50 150 + 50 150 + 100 #> 3 chr2 100 200 - 50 150 - 50"},{"path":"https://rnabioco.github.io/valr/dev/articles/valr.html","id":"column-specification","dir":"Articles","previous_headings":"","what":"Column specification","title":"valr overview","text":"Columns BEDtools referred position: valr, columns referred name can used multiple name/value expressions summaries.","code":"# calculate the mean of column 6 for intervals in `b` that overlap with `a` bedtools map -a a.bed -b b.bed -c 6 -o mean # calculate the mean and variance for a `value` column bed_map(a, b, .mean = mean(value), .var = var(value)) # report concatenated and max values for merged intervals bed_merge(a, .concat = concat(value), .max = max(value))"},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/articles/valr.html","id":"meta-analysis","dir":"Articles","previous_headings":"Getting started","what":"Meta-analysis","title":"valr overview","text":"demonstration illustrates use valr tools perform “meta-analysis” signals relative genomic features. analyze distribution histone marks surrounding transcription start sites. First load libraries relevant data. generate 1 bp intervals represent transcription start sites (TSSs). focus + strand genes, - genes easily accommodated filtering using bed_makewindows() reversed window numbers. Now use .win_id group bed_map() calculate sum mapping y signals onto intervals x. data regrouped .win_id summary mean sd values calculated. Finally, summary statistics used construct plot illustrates histone density surrounding TSSs.","code":"# `valr_example()` identifies the path of example files bedfile <- valr_example(\"genes.hg19.chr22.bed.gz\") genomefile <- valr_example(\"hg19.chrom.sizes.gz\") bgfile <- valr_example(\"hela.h3k4.chip.bg.gz\") genes <- read_bed(bedfile) genome <- read_genome(genomefile) y <- read_bedgraph(bgfile) # generate 1 bp TSS intervals, `+` strand only tss <- genes |> filter(strand == \"+\") |> mutate(end = start + 1) # 1000 bp up and downstream region_size <- 1000 # 50 bp windows win_size <- 50 # add slop to the TSS, break into windows and add a group x <- tss |> bed_slop(genome, both = region_size) |> bed_makewindows(win_size) x #> # A tibble: 13,530 × 7 #> chrom start end name score strand .win_id #> #> 1 chr22 16161065 16161115 LINC00516 3 + 1 #> 2 chr22 16161115 16161165 LINC00516 3 + 2 #> 3 chr22 16161165 16161215 LINC00516 3 + 3 #> 4 chr22 16161215 16161265 LINC00516 3 + 4 #> 5 chr22 16161265 16161315 LINC00516 3 + 5 #> 6 chr22 16161315 16161365 LINC00516 3 + 6 #> 7 chr22 16161365 16161415 LINC00516 3 + 7 #> 8 chr22 16161415 16161465 LINC00516 3 + 8 #> 9 chr22 16161465 16161515 LINC00516 3 + 9 #> 10 chr22 16161515 16161565 LINC00516 3 + 10 #> # ℹ 13,520 more rows # map signals to TSS regions and calculate summary statistics. res <- bed_map(x, y, win_sum = sum(value, na.rm = TRUE)) |> group_by(.win_id) |> summarize( win_mean = mean(win_sum, na.rm = TRUE), win_sd = sd(win_sum, na.rm = TRUE) ) res #> # A tibble: 41 × 3 #> .win_id win_mean win_sd #> #> 1 1 101. 85.8 #> 2 2 111. 81.1 #> 3 3 123. 99.1 #> 4 4 116. 96.3 #> 5 5 116. 102. #> 6 6 125. 95.1 #> 7 7 123. 94.4 #> 8 8 128. 91.5 #> 9 9 130. 95.7 #> 10 10 130. 88.8 #> # ℹ 31 more rows x_labels <- seq( -region_size, region_size, by = win_size * 5 ) x_breaks <- seq(1, 41, by = 5) sd_limits <- aes( ymax = win_mean + win_sd, ymin = win_mean - win_sd ) ggplot( res, aes( x = .win_id, y = win_mean ) ) + geom_point() + geom_pointrange(sd_limits) + scale_x_continuous( labels = x_labels, breaks = x_breaks ) + labs( x = \"Position (bp from TSS)\", y = \"Signal\", title = \"Human H3K4me3 signal near transcription start sites\" ) + theme_classic()"},{"path":"https://rnabioco.github.io/valr/dev/articles/valr.html","id":"related-work","dir":"Articles","previous_headings":"","what":"Related work","title":"valr overview","text":"Command-line tools BEDtools bedops. Python library pybedtools wraps BEDtools. R packages GenomicRanges, bedr, IRanges GenometriCorr provide similar capability different philosophy.","code":""},{"path":"https://rnabioco.github.io/valr/dev/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Jay Hesselberth. Author. Kent Riemondy. Author, maintainer. . Funder, copyright holder.","code":""},{"path":"https://rnabioco.github.io/valr/dev/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Riemondy KA, Sheridan RM, Gillen , Yu Y, Bennett CG, Hesselberth JR (2017). “valr: Reproducible Genome Interval Arithmetic R.” F1000Research. doi:10.12688/f1000research.11997.1.","code":"@Article{, title = {valr: Reproducible Genome Interval Arithmetic in R}, year = {2017}, author = {Kent A. Riemondy and Ryan M. Sheridan and Austin Gillen and Yinni Yu and Christopher G. Bennett and Jay R. Hesselberth}, journal = {F1000Research}, doi = {10.12688/f1000research.11997.1}, }"},{"path":"https://rnabioco.github.io/valr/dev/index.html","id":"valr-","dir":"","previous_headings":"","what":"Genome Interval Arithmetic","title":"Genome Interval Arithmetic","text":"valr provides tools read manipulate genome intervals signals, similar BEDtools suite.","code":""},{"path":"https://rnabioco.github.io/valr/dev/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"Genome Interval Arithmetic","text":"latest stable version can installed CRAN: latest development version can installed github:","code":"install.packages('valr') # install.packages(\"devtools\") devtools::install_github('rnabioco/valr')"},{"path":"https://rnabioco.github.io/valr/dev/index.html","id":"valr-example","dir":"","previous_headings":"","what":"valr Example","title":"Genome Interval Arithmetic","text":"Functions valr similar names BEDtools counterparts, familiar users coming BEDtools suite. Unlike tools wrap BEDtools write temporary files disk, valr tools run natively memory. Similar pybedtools, valr terse syntax:","code":"library(valr) library(dplyr) snps <- read_bed(valr_example(\"hg19.snps147.chr22.bed.gz\")) genes <- read_bed(valr_example(\"genes.hg19.chr22.bed.gz\")) # find snps in intergenic regions intergenic <- bed_subtract(snps, genes) # find distance from intergenic snps to nearest gene nearby <- bed_closest(intergenic, genes) nearby |> select(starts_with(\"name\"), .overlap, .dist) |> filter(abs(.dist) < 5000) #> # A tibble: 1,047 × 4 #> name.x name.y .overlap .dist #> #> 1 rs530458610 P704P 0 2579 #> 2 rs2261631 P704P 0 -268 #> 3 rs570770556 POTEH 0 -913 #> 4 rs538163832 POTEH 0 -953 #> 5 rs190224195 POTEH 0 -1399 #> 6 rs2379966 DQ571479 0 4750 #> 7 rs142687051 DQ571479 0 3558 #> 8 rs528403095 DQ571479 0 3309 #> 9 rs555126291 DQ571479 0 2745 #> 10 rs5747567 DQ571479 0 -1778 #> # ℹ 1,037 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed12_to_exons.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert BED12 to individual exons in BED6. — bed12_to_exons","title":"Convert BED12 to individual exons in BED6. — bed12_to_exons","text":"conversion BED6 format, score column contains exon number, respect strand (.e., first exon - strand genes larger start end coordinates).","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed12_to_exons.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert BED12 to individual exons in BED6. — bed12_to_exons","text":"","code":"bed12_to_exons(x)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed12_to_exons.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert BED12 to individual exons in BED6. — bed12_to_exons","text":"x ivl_df","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed12_to_exons.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert BED12 to individual exons in BED6. — bed12_to_exons","text":"","code":"x <- read_bed12(valr_example(\"mm9.refGene.bed.gz\")) bed12_to_exons(x) #> # A tibble: 1,683 × 6 #> chrom start end name score strand #> #> 1 chr1 3204562 3207049 NM_001011874 3 - #> 2 chr1 3411782 3411982 NM_001011874 2 - #> 3 chr1 3660632 3661579 NM_001011874 1 - #> 4 chr1 4280926 4283093 NM_001195662 4 - #> 5 chr1 4341990 4342162 NM_001195662 3 - #> 6 chr1 4342282 4342918 NM_001195662 2 - #> 7 chr1 4399250 4399322 NM_001195662 1 - #> 8 chr1 4847774 4848057 NM_001159750 1 + #> 9 chr1 4847774 4848057 NM_011541 1 + #> 10 chr1 4848408 4848584 NM_001159751 1 + #> # ℹ 1,673 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_absdist.html","id":null,"dir":"Reference","previous_headings":"","what":"Compute absolute distances between intervals. — bed_absdist","title":"Compute absolute distances between intervals. — bed_absdist","text":"Computes absolute distance midpoint x interval midpoints closest y interval.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_absdist.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compute absolute distances between intervals. — bed_absdist","text":"","code":"bed_absdist(x, y, genome)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_absdist.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compute absolute distances between intervals. — bed_absdist","text":"x ivl_df y ivl_df genome genome_df","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_absdist.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compute absolute distances between intervals. — bed_absdist","text":"ivl_df .absdist .absdist_scaled columns.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_absdist.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Compute absolute distances between intervals. — bed_absdist","text":"Absolute distances scaled inter-reference gap chromosome follows. Q query points R reference points chromosome, scale distance query point closest reference point inter-reference gap chromosome. x interval matching y chromosome, .absdist NA. $$d_i(x,y) = min_k(|q_i - r_k|)\\frac{R}{Length\\ \\ chromosome}$$ absolute scaled distances reported .absdist .absdist_scaled. Interval statistics can used combination dplyr::group_by() dplyr::() calculate statistics subsets data. See vignette('interval-stats') examples.","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_absdist.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Compute absolute distances between intervals. — bed_absdist","text":"","code":"genome <- read_genome(valr_example(\"hg19.chrom.sizes.gz\")) x <- bed_random(genome, seed = 1010486) y <- bed_random(genome, seed = 9203911) bed_absdist(x, y, genome) #> # A tibble: 1,000,000 × 5 #> chrom start end .absdist .absdist_scaled #> #> 1 chr1 5184 6184 1392 0.448 #> 2 chr1 7663 8663 1087 0.350 #> 3 chr1 9858 10858 1526 0.491 #> 4 chr1 13805 14805 2421 0.779 #> 5 chr1 14081 15081 2697 0.868 #> 6 chr1 16398 17398 1700 0.547 #> 7 chr1 17486 18486 612 0.197 #> 8 chr1 22063 23063 466 0.150 #> 9 chr1 22494 23494 897 0.289 #> 10 chr1 29351 30351 1143 0.368 #> # ℹ 999,990 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_closest.html","id":null,"dir":"Reference","previous_headings":"","what":"Identify closest intervals. — bed_closest","title":"Identify closest intervals. — bed_closest","text":"Identify closest intervals.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_closest.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Identify closest intervals. — bed_closest","text":"","code":"bed_closest(x, y, overlap = TRUE, suffix = c(\".x\", \".y\"))"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_closest.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Identify closest intervals. — bed_closest","text":"x ivl_df y ivl_df overlap report overlapping intervals suffix colname suffixes output","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_closest.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Identify closest intervals. — bed_closest","text":"ivl_df additional columns: .overlap amount overlap overlapping interval. Non-overlapping adjacent intervals overlap 0. .overlap included output overlap = FALSE. .dist distance closest interval. Negative distances denote upstream intervals. Book-ended intervals distance 1.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_closest.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Identify closest intervals. — bed_closest","text":"input tbls grouped chrom default, additional groups can added using dplyr::group_by(). example, grouping strand constrain analyses strand. compare opposing strands across two tbls, strands y tbl can first inverted using flip_strands().","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_closest.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Identify closest intervals. — bed_closest","text":"interval x bed_closest() returns overlapping intervals y closest non-intersecting y interval. Setting overlap = FALSE report closest non-intersecting y intervals, ignoring overlapping y intervals.","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_closest.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Identify closest intervals. — bed_closest","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 100, 125 ) y <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 25, 50, \"chr1\", 140, 175 ) bed_glyph(bed_closest(x, y)) x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 500, 600, \"chr2\", 5000, 6000 ) y <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 100, 200, \"chr1\", 150, 200, \"chr1\", 550, 580, \"chr2\", 7000, 8500 ) bed_closest(x, y) #> # A tibble: 4 × 7 #> chrom start.x end.x start.y end.y .overlap .dist #> #> 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 × 6 #> chrom start.x end.x start.y end.y .dist #> #> 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 <- tibble::tribble( ~chrom, ~start, ~end, ~name, ~score, ~strand, \"chr1\", 10, 20, \"a\", 1, \"-\" ) y <- tibble::tribble( ~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 × 14 #> chrom start.x end.x name.x score.x strand.x start.y end.y name.y score.y #> #> 1 chr1 10 20 a 1 - 21 22 b 1 #> 2 chr1 10 20 a 1 - 8 9 b 1 #> # ℹ 4 more variables: strand.y , .overlap , .dist , #> # .dist_strand # report absolute distances res$.abs_dist <- abs(res$.dist) res #> # A tibble: 2 × 15 #> chrom start.x end.x name.x score.x strand.x start.y end.y name.y score.y #> #> 1 chr1 10 20 a 1 - 21 22 b 1 #> 2 chr1 10 20 a 1 - 8 9 b 1 #> # ℹ 5 more variables: strand.y , .overlap , .dist , #> # .dist_strand , .abs_dist "},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_cluster.html","id":null,"dir":"Reference","previous_headings":"","what":"Cluster neighboring intervals. — bed_cluster","title":"Cluster neighboring intervals. — bed_cluster","text":"output .id column can used downstream grouping operations. Default max_dist = 0 means overlapping book-ended intervals clustered.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_cluster.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Cluster neighboring intervals. — bed_cluster","text":"","code":"bed_cluster(x, max_dist = 0)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_cluster.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Cluster neighboring intervals. — bed_cluster","text":"x ivl_df max_dist maximum distance clustered intervals.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_cluster.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Cluster neighboring intervals. — bed_cluster","text":"ivl_df .id column specifying sets clustered intervals.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_cluster.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Cluster neighboring intervals. — bed_cluster","text":"input tbls grouped chrom default, additional groups can added using dplyr::group_by(). example, grouping strand constrain analyses strand. compare opposing strands across two tbls, strands y tbl can first inverted using flip_strands().","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_cluster.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Cluster neighboring intervals. — bed_cluster","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 100, 200, \"chr1\", 180, 250, \"chr1\", 250, 500, \"chr1\", 501, 1000, \"chr2\", 1, 100, \"chr2\", 150, 200 ) bed_cluster(x) #> # A tibble: 6 × 4 #> chrom start end .id #> #> 1 chr1 100 200 1 #> 2 chr1 180 250 1 #> 3 chr1 250 500 1 #> 4 chr1 501 1000 2 #> 5 chr2 1 100 3 #> 6 chr2 150 200 4 # glyph illustrating clustering of overlapping and book-ended intervals x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 1, 10, \"chr1\", 5, 20, \"chr1\", 30, 40, \"chr1\", 40, 50, \"chr1\", 80, 90 ) bed_glyph(bed_cluster(x), label = \".id\")"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_complement.html","id":null,"dir":"Reference","previous_headings":"","what":"Identify intervals in a genome not covered by a query. — bed_complement","title":"Identify intervals in a genome not covered by a query. — bed_complement","text":"Identify intervals genome covered query.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_complement.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Identify intervals in a genome not covered by a query. — bed_complement","text":"","code":"bed_complement(x, genome)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_complement.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Identify intervals in a genome not covered by a query. — bed_complement","text":"x ivl_df genome ivl_df","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_complement.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Identify intervals in a genome not covered by a query. — bed_complement","text":"ivl_df","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_complement.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Identify intervals in a genome not covered by a query. — bed_complement","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 0, 10, \"chr1\", 75, 100 ) genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 200 ) bed_glyph(bed_complement(x, genome)) genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 500, \"chr2\", 600, \"chr3\", 800 ) x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 100, 300, \"chr1\", 200, 400, \"chr2\", 0, 100, \"chr2\", 200, 400, \"chr3\", 500, 600 ) # intervals not covered by x bed_complement(x, genome) #> # A tibble: 6 × 3 #> chrom start end #> #> 1 chr1 0 100 #> 2 chr1 400 500 #> 3 chr2 100 200 #> 4 chr2 400 600 #> 5 chr3 0 500 #> 6 chr3 600 800"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_coverage.html","id":null,"dir":"Reference","previous_headings":"","what":"Compute coverage of intervals. — bed_coverage","title":"Compute coverage of intervals. — bed_coverage","text":"Compute coverage intervals.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_coverage.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compute coverage of intervals. — bed_coverage","text":"","code":"bed_coverage(x, y, ...)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_coverage.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compute coverage of intervals. — bed_coverage","text":"x ivl_df y ivl_df ... extra arguments (used)","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_coverage.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compute coverage of intervals. — bed_coverage","text":"ivl_df following additional columns: .ints number x intersections .cov per-base coverage x intervals .len total length y intervals covered x intervals .frac .len scaled number y intervals","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_coverage.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Compute coverage of intervals. — bed_coverage","text":"input tbls grouped chrom default, additional groups can added using dplyr::group_by(). example, grouping strand constrain analyses strand. compare opposing strands across two tbls, strands y tbl can first inverted using flip_strands().","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_coverage.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Compute coverage of intervals. — bed_coverage","text":"Book-ended intervals included coverage calculations.","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_coverage.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Compute coverage of intervals. — bed_coverage","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, ~strand, \"chr1\", 100, 500, \"+\", \"chr2\", 200, 400, \"+\", \"chr2\", 300, 500, \"-\", \"chr2\", 800, 900, \"-\" ) y <- tibble::tribble( ~chrom, ~start, ~end, ~value, ~strand, \"chr1\", 150, 400, 100, \"+\", \"chr1\", 500, 550, 100, \"+\", \"chr2\", 230, 430, 200, \"-\", \"chr2\", 350, 430, 300, \"-\" ) bed_coverage(x, y) #> # A tibble: 4 × 8 #> chrom start end strand .ints .cov .len .frac #> #> 1 chr1 100 500 + 2 250 400 0.625 #> 2 chr2 200 400 + 2 170 200 0.85 #> 3 chr2 300 500 - 2 130 200 0.65 #> 4 chr2 800 900 - 0 0 100 0"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_fisher.html","id":null,"dir":"Reference","previous_headings":"","what":"Fisher's test to measure overlap between two sets of intervals. — bed_fisher","title":"Fisher's test to measure overlap between two sets of intervals. — bed_fisher","text":"Calculate Fisher's test number intervals shared unique two sets x y intervals.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_fisher.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fisher's test to measure overlap between two sets of intervals. — bed_fisher","text":"","code":"bed_fisher(x, y, genome)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_fisher.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fisher's test to measure overlap between two sets of intervals. — bed_fisher","text":"x ivl_df y ivl_df genome genome_df","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_fisher.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fisher's test to measure overlap between two sets of intervals. — bed_fisher","text":"ivl_df","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_fisher.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Fisher's test to measure overlap between two sets of intervals. — bed_fisher","text":"Interval statistics can used combination dplyr::group_by() dplyr::() calculate statistics subsets data. See vignette('interval-stats') examples.","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_fisher.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fisher's test to measure overlap between two sets of intervals. — bed_fisher","text":"","code":"genome <- read_genome(valr_example(\"hg19.chrom.sizes.gz\")) x <- bed_random(genome, n = 1e4, seed = 1010486) y <- bed_random(genome, n = 1e4, seed = 9203911) bed_fisher(x, y, genome) #> # A tibble: 1 × 6 #> estimate p.value conf.low conf.high method alternative #> #> 1 0.945 0.707 0.722 1.22 Fisher's Exact Test for… two.sided"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_flank.html","id":null,"dir":"Reference","previous_headings":"","what":"Create flanking intervals from input intervals. — bed_flank","title":"Create flanking intervals from input intervals. — bed_flank","text":"Create flanking intervals input intervals.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_flank.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create flanking intervals from input intervals. — bed_flank","text":"","code":"bed_flank( x, genome, both = 0, left = 0, right = 0, fraction = FALSE, strand = FALSE, trim = FALSE, ... )"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_flank.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create flanking intervals from input intervals. — bed_flank","text":"x ivl_df genome genome_df number bases sizes left number bases left side right number bases right side fraction define flanks based fraction interval length strand define left right based strand trim adjust coordinates --bounds intervals ... extra arguments (used)","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_flank.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create flanking intervals from input intervals. — bed_flank","text":"ivl_df","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_flank.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create flanking intervals from input intervals. — bed_flank","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 25, 50, \"chr1\", 100, 125 ) genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 130 ) bed_glyph(bed_flank(x, genome, both = 20)) x <- tibble::tribble( ~chrom, ~start, ~end, ~name, ~score, ~strand, \"chr1\", 500, 1000, \".\", \".\", \"+\", \"chr1\", 1000, 1500, \".\", \".\", \"-\" ) genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 5000 ) bed_flank(x, genome, left = 100) #> # A tibble: 2 × 6 #> chrom start end name score strand #> #> 1 chr1 400 500 . . + #> 2 chr1 900 1000 . . - bed_flank(x, genome, right = 100) #> # A tibble: 2 × 6 #> chrom start end name score strand #> #> 1 chr1 1000 1100 . . + #> 2 chr1 1500 1600 . . - bed_flank(x, genome, both = 100) #> # A tibble: 4 × 6 #> chrom start end name score strand #> #> 1 chr1 400 500 . . + #> 2 chr1 900 1000 . . - #> 3 chr1 1000 1100 . . + #> 4 chr1 1500 1600 . . - bed_flank(x, genome, both = 0.5, fraction = TRUE) #> # A tibble: 4 × 6 #> chrom start end name score strand #> #> 1 chr1 250 500 . . + #> 2 chr1 750 1000 . . - #> 3 chr1 1000 1250 . . + #> 4 chr1 1500 1750 . . -"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_genomecov.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate coverage across a genome — bed_genomecov","title":"Calculate coverage across a genome — bed_genomecov","text":"function useful calculating interval coverage across entire genome.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_genomecov.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate coverage across a genome — bed_genomecov","text":"","code":"bed_genomecov(x, genome, zero_depth = FALSE)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_genomecov.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate coverage across a genome — bed_genomecov","text":"x ivl_df genome genome_df zero_depth TRUE, report intervals zero depth. Zero depth intervals reported respect groups.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_genomecov.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate coverage across a genome — bed_genomecov","text":"ivl_df additional column: .depth depth interval coverage","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_genomecov.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate coverage across a genome — bed_genomecov","text":"input tbls grouped chrom default, additional groups can added using dplyr::group_by(). example, grouping strand constrain analyses strand. compare opposing strands across two tbls, strands y tbl can first inverted using flip_strands().","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_genomecov.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate coverage across a genome — bed_genomecov","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, ~strand, \"chr1\", 20, 70, \"+\", \"chr1\", 50, 100, \"-\", \"chr1\", 200, 250, \"+\", \"chr1\", 220, 250, \"+\" ) genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 500, \"chr2\", 1000 ) bed_genomecov(x, genome) #> # A tibble: 5 × 4 #> chrom start end .depth #> #> 1 chr1 20 50 1 #> 2 chr1 50 70 2 #> 3 chr1 70 100 1 #> 4 chr1 200 220 1 #> 5 chr1 220 250 2 bed_genomecov(dplyr::group_by(x, strand), genome) #> # A tibble: 4 × 5 #> chrom start end strand .depth #> #> 1 chr1 20 70 + 1 #> 2 chr1 200 220 + 1 #> 3 chr1 220 250 + 2 #> 4 chr1 50 100 - 1 bed_genomecov(dplyr::group_by(x, strand), genome, zero_depth = TRUE) #> # A tibble: 11 × 5 #> chrom start end strand .depth #> #> 1 chr1 0 20 + 0 #> 2 chr1 0 50 - 0 #> 3 chr1 20 70 + 1 #> 4 chr1 50 100 - 1 #> 5 chr1 70 200 + 0 #> 6 chr1 100 500 - 0 #> 7 chr1 200 220 + 1 #> 8 chr1 220 250 + 2 #> 9 chr1 250 500 + 0 #> 10 chr2 0 1000 + 0 #> 11 chr2 0 1000 - 0"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_glyph.html","id":null,"dir":"Reference","previous_headings":"","what":"Create example glyphs for valr functions. — bed_glyph","title":"Create example glyphs for valr functions. — bed_glyph","text":"Used illustrate output valr functions small examples.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_glyph.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create example glyphs for valr functions. — bed_glyph","text":"","code":"bed_glyph(expr, label = NULL)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_glyph.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create example glyphs for valr functions. — bed_glyph","text":"expr expression evaluate label column name use label values. present result call.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_glyph.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create example glyphs for valr functions. — bed_glyph","text":"ggplot2::ggplot()","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_glyph.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create example glyphs for valr functions. — bed_glyph","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 25, 50, \"chr1\", 100, 125 ) y <- tibble::tribble( ~chrom, ~start, ~end, ~value, \"chr1\", 30, 75, 50 ) bed_glyph(bed_intersect(x, y)) x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 30, 75, \"chr1\", 50, 90, \"chr1\", 91, 120 ) bed_glyph(bed_merge(x)) bed_glyph(bed_cluster(x), label = \".id\")"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_intersect.html","id":null,"dir":"Reference","previous_headings":"","what":"Identify intersecting intervals. — bed_intersect","title":"Identify intersecting intervals. — bed_intersect","text":"Report intersecting intervals x y tbls. Book-ended intervals .overlap values 0 output.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_intersect.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Identify intersecting intervals. — bed_intersect","text":"","code":"bed_intersect(x, ..., invert = FALSE, suffix = c(\".x\", \".y\"))"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_intersect.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Identify intersecting intervals. — bed_intersect","text":"x ivl_df ... one (e.g. list ) y ivl_df()s invert report x intervals y suffix colname suffixes output","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_intersect.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Identify intersecting intervals. — bed_intersect","text":"ivl_df original columns x y suffixed .x .y, new .overlap column extent overlap intersecting intervals. multiple y tbls supplied, .source contains variable names associated interval. original columns y suffixed .y output. ... contains named inputs (.e = y, b = z list(= y, b = z)), .source contain supplied names (see examples).","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_intersect.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Identify intersecting intervals. — bed_intersect","text":"input tbls grouped chrom default, additional groups can added using dplyr::group_by(). example, grouping strand constrain analyses strand. compare opposing strands across two tbls, strands y tbl can first inverted using flip_strands().","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_intersect.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Identify intersecting intervals. — bed_intersect","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 25, 50, \"chr1\", 100, 125 ) y <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 30, 75 ) bed_glyph(bed_intersect(x, y)) bed_glyph(bed_intersect(x, y, invert = TRUE)) x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 100, 500, \"chr2\", 200, 400, \"chr2\", 300, 500, \"chr2\", 800, 900 ) y <- tibble::tribble( ~chrom, ~start, ~end, ~value, \"chr1\", 150, 400, 100, \"chr1\", 500, 550, 100, \"chr2\", 230, 430, 200, \"chr2\", 350, 430, 300 ) bed_intersect(x, y) #> # A tibble: 6 × 7 #> chrom start.x end.x start.y end.y value.y .overlap #> #> 1 chr1 100 500 150 400 100 250 #> 2 chr1 100 500 500 550 100 0 #> 3 chr2 200 400 230 430 200 170 #> 4 chr2 200 400 350 430 300 50 #> 5 chr2 300 500 230 430 200 130 #> 6 chr2 300 500 350 430 300 80 bed_intersect(x, y, invert = TRUE) #> # A tibble: 1 × 3 #> chrom start end #> #> 1 chr2 800 900 # start and end of each overlapping interval res <- bed_intersect(x, y) dplyr::mutate(res, start = pmax(start.x, start.y), end = pmin(end.x, end.y) ) #> # A tibble: 6 × 9 #> chrom start.x end.x start.y end.y value.y .overlap start end #> #> 1 chr1 100 500 150 400 100 250 150 400 #> 2 chr1 100 500 500 550 100 0 500 500 #> 3 chr2 200 400 230 430 200 170 230 400 #> 4 chr2 200 400 350 430 300 50 350 400 #> 5 chr2 300 500 230 430 200 130 300 430 #> 6 chr2 300 500 350 430 300 80 350 430 z <- tibble::tribble( ~chrom, ~start, ~end, ~value, \"chr1\", 150, 400, 100, \"chr1\", 500, 550, 100, \"chr2\", 230, 430, 200, \"chr2\", 750, 900, 400 ) bed_intersect(x, y, z) #> # A tibble: 11 × 8 #> chrom start.x end.x start.y end.y value.y .source .overlap #> #> 1 chr1 100 500 150 400 100 y 250 #> 2 chr1 100 500 150 400 100 z 250 #> 3 chr1 100 500 500 550 100 y 0 #> 4 chr1 100 500 500 550 100 z 0 #> 5 chr2 200 400 230 430 200 y 170 #> 6 chr2 200 400 230 430 200 z 170 #> 7 chr2 200 400 350 430 300 y 50 #> 8 chr2 300 500 230 430 200 y 130 #> 9 chr2 300 500 230 430 200 z 130 #> 10 chr2 300 500 350 430 300 y 80 #> 11 chr2 800 900 750 900 400 z 100 bed_intersect(x, exons = y, introns = z) #> # A tibble: 11 × 8 #> chrom start.x end.x start.y end.y value.y .source .overlap #> #> 1 chr1 100 500 150 400 100 exons 250 #> 2 chr1 100 500 150 400 100 introns 250 #> 3 chr1 100 500 500 550 100 exons 0 #> 4 chr1 100 500 500 550 100 introns 0 #> 5 chr2 200 400 230 430 200 exons 170 #> 6 chr2 200 400 230 430 200 introns 170 #> 7 chr2 200 400 350 430 300 exons 50 #> 8 chr2 300 500 230 430 200 exons 130 #> 9 chr2 300 500 230 430 200 introns 130 #> 10 chr2 300 500 350 430 300 exons 80 #> 11 chr2 800 900 750 900 400 introns 100 # a list of tbl_intervals can also be passed bed_intersect(x, list(exons = y, introns = z)) #> # A tibble: 11 × 8 #> chrom start.x end.x start.y end.y value.y .source .overlap #> #> 1 chr1 100 500 150 400 100 exons 250 #> 2 chr1 100 500 150 400 100 introns 250 #> 3 chr1 100 500 500 550 100 exons 0 #> 4 chr1 100 500 500 550 100 introns 0 #> 5 chr2 200 400 230 430 200 exons 170 #> 6 chr2 200 400 230 430 200 introns 170 #> 7 chr2 200 400 350 430 300 exons 50 #> 8 chr2 300 500 230 430 200 exons 130 #> 9 chr2 300 500 230 430 200 introns 130 #> 10 chr2 300 500 350 430 300 exons 80 #> 11 chr2 800 900 750 900 400 introns 100"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_jaccard.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate the Jaccard statistic for two sets of intervals. — bed_jaccard","title":"Calculate the Jaccard statistic for two sets of intervals. — bed_jaccard","text":"Quantifies extent overlap sets intervals terms base-pairs. Groups shared input used calculate statistic subsets data.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_jaccard.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate the Jaccard statistic for two sets of intervals. — bed_jaccard","text":"","code":"bed_jaccard(x, y)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_jaccard.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate the Jaccard statistic for two sets of intervals. — bed_jaccard","text":"x ivl_df y ivl_df","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_jaccard.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate the Jaccard statistic for two sets of intervals. — bed_jaccard","text":"tibble following columns: len_i length intersection base-pairs len_u length union base-pairs jaccard value jaccard statistic n_int number intersecting intervals x y inputs grouped, return value contain one set values per group.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_jaccard.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate the Jaccard statistic for two sets of intervals. — bed_jaccard","text":"Jaccard statistic takes values [0,1] measured : $$ J(x,y) = \\frac{\\mid x \\bigcap y \\mid} {\\mid x \\bigcup y \\mid} = \\frac{\\mid x \\bigcap y \\mid} {\\mid x \\mid + \\mid y \\mid - \\mid x \\bigcap y \\mid} $$ Interval statistics can used combination dplyr::group_by() dplyr::() calculate statistics subsets data. See vignette('interval-stats') examples.","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_jaccard.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate the Jaccard statistic for two sets of intervals. — bed_jaccard","text":"","code":"genome <- read_genome(valr_example(\"hg19.chrom.sizes.gz\")) x <- bed_random(genome, seed = 1010486) y <- bed_random(genome, seed = 9203911) bed_jaccard(x, y) #> # A tibble: 1 × 4 #> len_i len_u jaccard n #> #> 1 236184699 1708774142 0.160 399981 # calculate jaccard per chromosome bed_jaccard( dplyr::group_by(x, chrom), dplyr::group_by(y, chrom) ) #> # A tibble: 25 × 5 #> chrom len_i len_u jaccard n #> #> 1 chr1 18939046 137345996 0.160 32156 #> 2 chr10 10524360 75209830 0.163 17830 #> 3 chr11 10378246 74655177 0.161 17497 #> 4 chr12 10146255 73725046 0.160 17163 #> 5 chr13 8867024 63737541 0.162 14992 #> 6 chr14 8047103 59033144 0.158 13647 #> 7 chr15 7794057 56514322 0.160 13236 #> 8 chr16 6907575 49874077 0.161 11650 #> 9 chr17 6186446 44917522 0.160 10487 #> 10 chr18 6044900 43248877 0.162 10129 #> # ℹ 15 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_makewindows.html","id":null,"dir":"Reference","previous_headings":"","what":"Divide intervals into new sub-intervals (","title":"Divide intervals into new sub-intervals (","text":"Divide intervals new sub-intervals (\"windows\").","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_makewindows.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Divide intervals into new sub-intervals (","text":"","code":"bed_makewindows(x, win_size = 0, step_size = 0, num_win = 0, reverse = FALSE)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_makewindows.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Divide intervals into new sub-intervals (","text":"x ivl_df win_size divide intervals fixed-size windows step_size size step next window num_win divide intervals fixed number windows reverse reverse window numbers","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_makewindows.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Divide intervals into new sub-intervals (","text":"ivl_df .win_id column contains numeric identifier window.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_makewindows.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Divide intervals into new sub-intervals (","text":"name .win_id columns can used create new interval names (see 'namenum' example ) subsequent group_by operations (see vignette).","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_makewindows.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Divide intervals into new sub-intervals (","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, ~name, ~score, ~strand, \"chr1\", 100, 200, \"A\", \".\", \"+\" ) bed_glyph(bed_makewindows(x, num_win = 10), label = \".win_id\") # Fixed number of windows bed_makewindows(x, num_win = 10) #> # A tibble: 10 × 7 #> chrom start end name score strand .win_id #> #> 1 chr1 100 110 A . + 1 #> 2 chr1 110 120 A . + 2 #> 3 chr1 120 130 A . + 3 #> 4 chr1 130 140 A . + 4 #> 5 chr1 140 150 A . + 5 #> 6 chr1 150 160 A . + 6 #> 7 chr1 160 170 A . + 7 #> 8 chr1 170 180 A . + 8 #> 9 chr1 180 190 A . + 9 #> 10 chr1 190 200 A . + 10 # Fixed window size bed_makewindows(x, win_size = 10) #> # A tibble: 10 × 7 #> chrom start end name score strand .win_id #> #> 1 chr1 100 110 A . + 1 #> 2 chr1 110 120 A . + 2 #> 3 chr1 120 130 A . + 3 #> 4 chr1 130 140 A . + 4 #> 5 chr1 140 150 A . + 5 #> 6 chr1 150 160 A . + 6 #> 7 chr1 160 170 A . + 7 #> 8 chr1 170 180 A . + 8 #> 9 chr1 180 190 A . + 9 #> 10 chr1 190 200 A . + 10 # Fixed window size with overlaps bed_makewindows(x, win_size = 10, step_size = 5) #> # A tibble: 20 × 7 #> chrom start end name score strand .win_id #> #> 1 chr1 100 110 A . + 1 #> 2 chr1 105 115 A . + 2 #> 3 chr1 110 120 A . + 3 #> 4 chr1 115 125 A . + 4 #> 5 chr1 120 130 A . + 5 #> 6 chr1 125 135 A . + 6 #> 7 chr1 130 140 A . + 7 #> 8 chr1 135 145 A . + 8 #> 9 chr1 140 150 A . + 9 #> 10 chr1 145 155 A . + 10 #> 11 chr1 150 160 A . + 11 #> 12 chr1 155 165 A . + 12 #> 13 chr1 160 170 A . + 13 #> 14 chr1 165 175 A . + 14 #> 15 chr1 170 180 A . + 15 #> 16 chr1 175 185 A . + 16 #> 17 chr1 180 190 A . + 17 #> 18 chr1 185 195 A . + 18 #> 19 chr1 190 200 A . + 19 #> 20 chr1 195 200 A . + 20 # reverse win_id bed_makewindows(x, win_size = 10, reverse = TRUE) #> # A tibble: 10 × 7 #> chrom start end name score strand .win_id #> #> 1 chr1 100 110 A . + 10 #> 2 chr1 110 120 A . + 9 #> 3 chr1 120 130 A . + 8 #> 4 chr1 130 140 A . + 7 #> 5 chr1 140 150 A . + 6 #> 6 chr1 150 160 A . + 5 #> 7 chr1 160 170 A . + 4 #> 8 chr1 170 180 A . + 3 #> 9 chr1 180 190 A . + 2 #> 10 chr1 190 200 A . + 1 # bedtools 'namenum' wins <- bed_makewindows(x, win_size = 10) dplyr::mutate(wins, namenum = stringr::str_c(name, \"_\", .win_id)) #> # A tibble: 10 × 8 #> chrom start end name score strand .win_id namenum #> #> 1 chr1 100 110 A . + 1 A_1 #> 2 chr1 110 120 A . + 2 A_2 #> 3 chr1 120 130 A . + 3 A_3 #> 4 chr1 130 140 A . + 4 A_4 #> 5 chr1 140 150 A . + 5 A_5 #> 6 chr1 150 160 A . + 6 A_6 #> 7 chr1 160 170 A . + 7 A_7 #> 8 chr1 170 180 A . + 8 A_8 #> 9 chr1 180 190 A . + 9 A_9 #> 10 chr1 190 200 A . + 10 A_10"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_map.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate summaries from overlapping intervals. — bed_map","title":"Calculate summaries from overlapping intervals. — bed_map","text":"Apply functions like min() count() intersecting intervals. bed_map() uses bed_intersect() identify intersecting intervals, output columns suffixed .x .y. Expressions refer input columns x y columns must take suffixes account.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_map.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate summaries from overlapping intervals. — bed_map","text":"","code":"bed_map(x, y, ..., min_overlap = 1) concat(.data, sep = \",\") values_unique(.data, sep = \",\") values(.data, sep = \",\")"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_map.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate summaries from overlapping intervals. — bed_map","text":"x ivl_df y ivl_df ... name-value pairs specifying column names expressions apply min_overlap minimum overlap intervals. .data data sep separator character","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_map.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate summaries from overlapping intervals. — bed_map","text":"ivl_df","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_map.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate summaries from overlapping intervals. — bed_map","text":"Book-ended intervals can included setting min_overlap = 0. Non-intersecting intervals x included result NA values. input tbls grouped chrom default, additional groups can added using dplyr::group_by(). example, grouping strand constrain analyses strand. compare opposing strands across two tbls, strands y tbl can first inverted using flip_strands().","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_map.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate summaries from overlapping intervals. — bed_map","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, 'chr1', 100, 250, 'chr2', 250, 500 ) y <- tibble::tribble( ~chrom, ~start, ~end, ~value, 'chr1', 100, 250, 10, 'chr1', 150, 250, 20, 'chr2', 250, 500, 500 ) bed_glyph(bed_map(x, y, value = sum(value)), label = 'value') # summary examples bed_map(x, y, .sum = sum(value)) #> # A tibble: 2 × 4 #> chrom start end .sum #> #> 1 chr1 100 250 30 #> 2 chr2 250 500 500 bed_map(x, y, .min = min(value), .max = max(value)) #> # A tibble: 2 × 5 #> chrom start end .min .max #> #> 1 chr1 100 250 10 20 #> 2 chr2 250 500 500 500 # identify non-intersecting intervals to include in the result res <- bed_map(x, y, .sum = sum(value)) x_not <- bed_intersect(x, y, invert = TRUE) dplyr::bind_rows(res, x_not) #> # A tibble: 2 × 4 #> chrom start end .sum #> #> 1 chr1 100 250 30 #> 2 chr2 250 500 500 # create a list-column bed_map(x, y, .values = list(value)) #> # A tibble: 2 × 4 #> chrom start end .values #> #> 1 chr1 100 250 #> 2 chr2 250 500 # use `nth` family from dplyr bed_map(x, y, .first = dplyr::first(value)) #> # A tibble: 2 × 4 #> chrom start end .first #> #> 1 chr1 100 250 10 #> 2 chr2 250 500 500 bed_map(x, y, .absmax = abs(max(value))) #> # A tibble: 2 × 4 #> chrom start end .absmax #> #> 1 chr1 100 250 20 #> 2 chr2 250 500 500 bed_map(x, y, .count = length(value)) #> # A tibble: 2 × 4 #> chrom start end .count #> #> 1 chr1 100 250 2 #> 2 chr2 250 500 1 bed_map(x, y, .vals = values(value)) #> # A tibble: 2 × 4 #> chrom start end .vals #> #> 1 chr1 100 250 10,20 #> 2 chr2 250 500 500 # count defaults are NA not 0; differs from bedtools2 ... bed_map(x, y, .counts = dplyr::n()) #> # A tibble: 2 × 4 #> chrom start end .counts #> #> 1 chr1 100 250 2 #> 2 chr2 250 500 1 # ... but NA counts can be coverted to 0's dplyr::mutate(bed_map(x, y, .counts = dplyr::n()), .counts = ifelse(is.na(.counts), 0, .counts)) #> # A tibble: 2 × 4 #> chrom start end .counts #> #> 1 chr1 100 250 2 #> 2 chr2 250 500 1"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_merge.html","id":null,"dir":"Reference","previous_headings":"","what":"Merge overlapping intervals. — bed_merge","title":"Merge overlapping intervals. — bed_merge","text":"Operations can performed merged intervals specifying name-value pairs. Default max_dist 0 means book-ended intervals merged.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_merge.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Merge overlapping intervals. — bed_merge","text":"","code":"bed_merge(x, max_dist = 0, ...)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_merge.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Merge overlapping intervals. — bed_merge","text":"x ivl_df max_dist maximum distance intervals merge ... name-value pairs specify operations merged intervals","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_merge.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Merge overlapping intervals. — bed_merge","text":"ivl_df","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_merge.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Merge overlapping intervals. — bed_merge","text":"input tbls grouped chrom default, additional groups can added using dplyr::group_by(). example, grouping strand constrain analyses strand. compare opposing strands across two tbls, strands y tbl can first inverted using flip_strands().","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_merge.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Merge overlapping intervals. — bed_merge","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 1, 50, \"chr1\", 10, 75, \"chr1\", 100, 120 ) bed_glyph(bed_merge(x)) x <- tibble::tribble( ~chrom, ~start, ~end, ~value, ~strand, \"chr1\", 1, 50, 1, \"+\", \"chr1\", 100, 200, 2, \"+\", \"chr1\", 150, 250, 3, \"-\", \"chr2\", 1, 25, 4, \"+\", \"chr2\", 200, 400, 5, \"-\", \"chr2\", 400, 500, 6, \"+\", \"chr2\", 450, 550, 7, \"+\" ) bed_merge(x) #> # A tibble: 4 × 3 #> chrom start end #> #> 1 chr1 1 50 #> 2 chr1 100 250 #> 3 chr2 1 25 #> 4 chr2 200 550 bed_merge(x, max_dist = 100) #> # A tibble: 3 × 3 #> chrom start end #> #> 1 chr1 1 250 #> 2 chr2 1 25 #> 3 chr2 200 550 # merge intervals on same strand bed_merge(dplyr::group_by(x, strand)) #> # A tibble: 6 × 4 #> # Groups: strand [2] #> chrom start end strand #> #> 1 chr1 1 50 + #> 2 chr1 100 200 + #> 3 chr1 150 250 - #> 4 chr2 1 25 + #> 5 chr2 400 550 + #> 6 chr2 200 400 - bed_merge(x, .value = sum(value)) #> # A tibble: 4 × 4 #> chrom start end .value #> #> 1 chr1 1 50 1 #> 2 chr1 100 250 5 #> 3 chr2 1 25 4 #> 4 chr2 200 550 18"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_partition.html","id":null,"dir":"Reference","previous_headings":"","what":"Partition intervals into elemental intervals — bed_partition","title":"Partition intervals into elemental intervals — bed_partition","text":"Convert set intervals elemental intervals contain start end position set.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_partition.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Partition intervals into elemental intervals — bed_partition","text":"","code":"bed_partition(x, ...)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_partition.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Partition intervals into elemental intervals — bed_partition","text":"x ivl_df ... name-value pairs specifying column names expressions apply","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_partition.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Partition intervals into elemental intervals — bed_partition","text":"ivl_df()","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_partition.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Partition intervals into elemental intervals — bed_partition","text":"Summary operations, min() count() can performed elemental intervals specifying name-value pairs. function useful calculating summaries across overlapping intervals without merging intervals. input tbls grouped chrom default, additional groups can added using dplyr::group_by(). example, grouping strand constrain analyses strand. compare opposing strands across two tbls, strands y tbl can first inverted using flip_strands().","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_partition.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Partition intervals into elemental intervals — bed_partition","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, ~value, ~strand, \"chr1\", 100, 500, 10, \"+\", \"chr1\", 200, 400, 20, \"-\", \"chr1\", 300, 550, 30, \"+\", \"chr1\", 550, 575, 2, \"+\", \"chr1\", 800, 900, 5, \"+\" ) bed_glyph(bed_partition(x)) bed_glyph(bed_partition(x, value = sum(value)), label = \"value\") bed_partition(x) #> # A tibble: 7 × 3 #> chrom start end #> #> 1 chr1 100 200 #> 2 chr1 200 300 #> 3 chr1 300 400 #> 4 chr1 400 500 #> 5 chr1 500 550 #> 6 chr1 550 575 #> 7 chr1 800 900 # compute summary over each elemental interval bed_partition(x, value = sum(value)) #> # A tibble: 7 × 4 #> chrom start end value #> #> 1 chr1 100 200 10 #> 2 chr1 200 300 30 #> 3 chr1 300 400 60 #> 4 chr1 400 500 40 #> 5 chr1 500 550 30 #> 6 chr1 550 575 2 #> 7 chr1 800 900 5 # partition and compute summaries based on group x <- dplyr::group_by(x, strand) bed_partition(x, value = sum(value)) #> # A tibble: 6 × 5 #> chrom start end strand value #> #> 1 chr1 100 300 + 10 #> 2 chr1 200 400 - 20 #> 3 chr1 300 500 + 40 #> 4 chr1 500 550 + 30 #> 5 chr1 550 575 + 2 #> 6 chr1 800 900 + 5 # combine values across multiple tibbles y <- tibble::tribble( ~chrom, ~start, ~end, ~value, ~strand, \"chr1\", 10, 500, 100, \"+\", \"chr1\", 250, 420, 200, \"-\", \"chr1\", 350, 550, 300, \"+\", \"chr1\", 550, 555, 20, \"+\", \"chr1\", 800, 900, 50, \"+\" ) x <- dplyr::bind_rows(x, y) bed_partition(x, value = sum(value)) #> # A tibble: 11 × 5 #> chrom start end strand value #> #> 1 chr1 10 100 + 100 #> 2 chr1 100 300 + 110 #> 3 chr1 200 250 - 20 #> 4 chr1 250 400 - 220 #> 5 chr1 300 350 + 140 #> 6 chr1 350 500 + 440 #> 7 chr1 400 420 - 200 #> 8 chr1 500 550 + 330 #> 9 chr1 550 555 + 22 #> 10 chr1 555 575 + 2 #> 11 chr1 800 900 + 55"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_projection.html","id":null,"dir":"Reference","previous_headings":"","what":"Projection test for query interval overlap. — bed_projection","title":"Projection test for query interval overlap. — bed_projection","text":"Projection test query interval overlap.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_projection.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Projection test for query interval overlap. — bed_projection","text":"","code":"bed_projection(x, y, genome, by_chrom = FALSE)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_projection.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Projection test for query interval overlap. — bed_projection","text":"x ivl_df y ivl_df genome genome_df by_chrom compute test per chromosome","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_projection.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Projection test for query interval overlap. — bed_projection","text":"ivl_df following columns: chrom name chromosome tested by_chrom = TRUE, otherwise value whole_genome p.value p-value binomial test. p-values > 0.5 converted 1 - p-value lower_tail FALSE obs_exp_ratio ratio observed expected overlap frequency lower_tail TRUE indicates observed overlaps lower tail distribution (e.g., less overlap expected). FALSE indicates observed overlaps upper tail distribution (e.g., overlap expected)","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_projection.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Projection test for query interval overlap. — bed_projection","text":"Interval statistics can used combination dplyr::group_by() dplyr::() calculate statistics subsets data. See vignette('interval-stats') examples.","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_projection.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Projection test for query interval overlap. — bed_projection","text":"","code":"genome <- read_genome(valr_example(\"hg19.chrom.sizes.gz\")) x <- bed_random(genome, seed = 1010486) y <- bed_random(genome, seed = 9203911) bed_projection(x, y, genome) #> # A tibble: 1 × 4 #> chrom p.value obs_exp_ratio lower_tail #> #> 1 whole_genome 0.000850 1.01 FALSE bed_projection(x, y, genome, by_chrom = TRUE) #> # A tibble: 25 × 4 #> chrom p.value obs_exp_ratio lower_tail #> #> 1 chr1 0.176 1.01 FALSE #> 2 chr10 0.0209 1.02 FALSE #> 3 chr11 0.118 1.01 FALSE #> 4 chr12 0.479 1.00 FALSE #> 5 chr13 0.245 1.01 FALSE #> 6 chr14 0.120 0.990 TRUE #> 7 chr15 0.333 1.00 FALSE #> 8 chr16 0.213 1.01 FALSE #> 9 chr17 0.181 0.991 TRUE #> 10 chr18 0.0306 1.02 FALSE #> # ℹ 15 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_random.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate randomly placed intervals on a genome. — bed_random","title":"Generate randomly placed intervals on a genome. — bed_random","text":"Generate randomly placed intervals genome.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_random.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate randomly placed intervals on a genome. — bed_random","text":"","code":"bed_random(genome, length = 1000, n = 1e+06, seed = 0, sorted = TRUE)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_random.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate randomly placed intervals on a genome. — bed_random","text":"genome genome_df length length intervals n number intervals generate seed seed RNG reproducible intervals sorted return sorted output","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_random.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generate randomly placed intervals on a genome. — bed_random","text":"ivl_df","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_random.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Generate randomly placed intervals on a genome. — bed_random","text":"Sorting can suppressed sorted = FALSE.","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_random.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Generate randomly placed intervals on a genome. — bed_random","text":"","code":"genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 10000000, \"chr2\", 50000000, \"chr3\", 60000000, \"chrX\", 5000000 ) bed_random(genome, seed = 10104) #> # A tibble: 1,000,000 × 3 #> chrom start end #> #> 1 chr1 265 1265 #> 2 chr1 315 1315 #> 3 chr1 335 1335 #> 4 chr1 513 1513 #> 5 chr1 625 1625 #> 6 chr1 635 1635 #> 7 chr1 653 1653 #> 8 chr1 731 1731 #> 9 chr1 859 1859 #> 10 chr1 1024 2024 #> # ℹ 999,990 more rows # sorting can be suppressed bed_random(genome, sorted = FALSE, seed = 10104) #> # A tibble: 1,000,000 × 3 #> chrom start end #> #> 1 chr3 2681468 2682468 #> 2 chr3 25364020 25365020 #> 3 chr2 43134407 43135407 #> 4 chr2 36344257 36345257 #> 5 chr3 39019690 39020690 #> 6 chr3 59869387 59870387 #> 7 chr3 56220373 56221373 #> 8 chr3 57965913 57966913 #> 9 chr2 25303342 25304342 #> 10 chr3 16018594 16019594 #> # ℹ 999,990 more rows # 500 random intervals of length 500 bed_random(genome, length = 500, n = 500, seed = 10104) #> # A tibble: 500 × 3 #> chrom start end #> #> 1 chr1 379360 379860 #> 2 chr1 394770 395270 #> 3 chr1 1215880 1216380 #> 4 chr1 1339287 1339787 #> 5 chr1 2046513 2047013 #> 6 chr1 2156755 2157255 #> 7 chr1 2189109 2189609 #> 8 chr1 2221665 2222165 #> 9 chr1 2223456 2223956 #> 10 chr1 2253135 2253635 #> # ℹ 490 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_reldist.html","id":null,"dir":"Reference","previous_headings":"","what":"Compute relative distances between intervals. — bed_reldist","title":"Compute relative distances between intervals. — bed_reldist","text":"Compute relative distances intervals.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_reldist.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compute relative distances between intervals. — bed_reldist","text":"","code":"bed_reldist(x, y, detail = FALSE)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_reldist.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compute relative distances between intervals. — bed_reldist","text":"x ivl_df y ivl_df detail report relative distances x interval.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_reldist.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compute relative distances between intervals. — bed_reldist","text":"detail = FALSE, ivl_df summarizes calculated .reldist values following columns: .reldist relative distance metric .counts number metric observations .total total observations .freq frequency observation detail = TRUE, .reldist column reports relative distance input x interval.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_reldist.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Compute relative distances between intervals. — bed_reldist","text":"Interval statistics can used combination dplyr::group_by() dplyr::() calculate statistics subsets data. See vignette('interval-stats') examples.","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_reldist.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Compute relative distances between intervals. — bed_reldist","text":"","code":"genome <- read_genome(valr_example(\"hg19.chrom.sizes.gz\")) x <- bed_random(genome, seed = 1010486) y <- bed_random(genome, seed = 9203911) bed_reldist(x, y) #> # A tibble: 51 × 4 #> .reldist .counts .total .freq #> #> 1 0 20202 999938 0.0202 #> 2 0.01 20031 999938 0.0200 #> 3 0.02 19977 999938 0.0200 #> 4 0.03 19871 999938 0.0199 #> 5 0.04 20129 999938 0.0201 #> 6 0.05 20197 999938 0.0202 #> 7 0.06 20020 999938 0.0200 #> 8 0.07 20063 999938 0.0201 #> 9 0.08 20053 999938 0.0201 #> 10 0.09 20021 999938 0.0200 #> # ℹ 41 more rows bed_reldist(x, y, detail = TRUE) #> # A tibble: 999,938 × 4 #> chrom start end .reldist #> #> 1 chr1 5184 6184 0.270 #> 2 chr1 7663 8663 0.226 #> 3 chr1 9858 10858 0.317 #> 4 chr1 13805 14805 0.361 #> 5 chr1 14081 15081 0.402 #> 6 chr1 16398 17398 0.253 #> 7 chr1 17486 18486 0.0912 #> 8 chr1 22063 23063 0.107 #> 9 chr1 22494 23494 0.207 #> 10 chr1 29351 30351 0.400 #> # ℹ 999,928 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_shift.html","id":null,"dir":"Reference","previous_headings":"","what":"Adjust intervals by a fixed size. — bed_shift","title":"Adjust intervals by a fixed size. — bed_shift","text":"--bounds intervals removed default.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_shift.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Adjust intervals by a fixed size. — bed_shift","text":"","code":"bed_shift(x, genome, size = 0, fraction = 0, trim = FALSE)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_shift.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Adjust intervals by a fixed size. — bed_shift","text":"x ivl_df genome ivl_df size number bases shift. positive numbers shift right, negative shift left. fraction define size fraction interval trim adjust coordinates --bounds intervals","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_shift.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Adjust intervals by a fixed size. — bed_shift","text":"ivl_df","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_shift.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Adjust intervals by a fixed size. — bed_shift","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 25, 50, \"chr1\", 100, 125 ) genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 125 ) bed_glyph(bed_shift(x, genome, size = -20)) x <- tibble::tribble( ~chrom, ~start, ~end, ~strand, \"chr1\", 100, 150, \"+\", \"chr1\", 200, 250, \"+\", \"chr2\", 300, 350, \"+\", \"chr2\", 400, 450, \"-\", \"chr3\", 500, 550, \"-\", \"chr3\", 600, 650, \"-\" ) genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 1000, \"chr2\", 2000, \"chr3\", 3000 ) bed_shift(x, genome, 100) #> # A tibble: 6 × 4 #> chrom start end strand #> #> 1 chr1 200 250 + #> 2 chr1 300 350 + #> 3 chr2 400 450 + #> 4 chr2 500 550 - #> 5 chr3 600 650 - #> 6 chr3 700 750 - bed_shift(x, genome, fraction = 0.5) #> # A tibble: 6 × 4 #> chrom start end strand #> #> 1 chr1 125 175 + #> 2 chr1 225 275 + #> 3 chr2 325 375 + #> 4 chr2 425 475 - #> 5 chr3 525 575 - #> 6 chr3 625 675 - # shift with respect to strand stranded <- dplyr::group_by(x, strand) bed_shift(stranded, genome, 100) #> # A tibble: 6 × 4 #> chrom start end strand #> #> 1 chr1 200 250 + #> 2 chr1 300 350 + #> 3 chr2 400 450 + #> 4 chr2 300 350 - #> 5 chr3 400 450 - #> 6 chr3 500 550 -"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_shuffle.html","id":null,"dir":"Reference","previous_headings":"","what":"Shuffle input intervals. — bed_shuffle","title":"Shuffle input intervals. — bed_shuffle","text":"Shuffle input intervals.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_shuffle.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Shuffle input intervals. — bed_shuffle","text":"","code":"bed_shuffle( x, genome, incl = NULL, excl = NULL, max_tries = 1000, within = FALSE, seed = 0 )"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_shuffle.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Shuffle input intervals. — bed_shuffle","text":"x ivl_df genome genome_df incl ivl_df included intervals excl ivl_df excluded intervals max_tries maximum tries identify bounded interval within shuffle within chromosomes seed seed reproducible intervals","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_shuffle.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Shuffle input intervals. — bed_shuffle","text":"ivl_df","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_shuffle.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Shuffle input intervals. — bed_shuffle","text":"","code":"genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 1e6, \"chr2\", 2e6, \"chr3\", 4e6 ) x <- bed_random(genome, seed = 1010486) bed_shuffle(x, genome, seed = 9830491) #> # A tibble: 1,000,000 × 3 #> chrom start end #> #> 1 chr2 1463822 1464822 #> 2 chr2 619967 620967 #> 3 chr2 1769865 1770865 #> 4 chr2 203953 204953 #> 5 chr3 2119387 2120387 #> 6 chr2 1216667 1217667 #> 7 chr3 2109652 2110652 #> 8 chr2 213473 214473 #> 9 chr1 154156 155156 #> 10 chr3 2201278 2202278 #> # ℹ 999,990 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_slop.html","id":null,"dir":"Reference","previous_headings":"","what":"Increase the size of input intervals. — bed_slop","title":"Increase the size of input intervals. — bed_slop","text":"Increase size input intervals.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_slop.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Increase the size of input intervals. — bed_slop","text":"","code":"bed_slop( x, genome, both = 0, left = 0, right = 0, fraction = FALSE, strand = FALSE, trim = FALSE, ... )"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_slop.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Increase the size of input intervals. — bed_slop","text":"x ivl_df genome genome_df number bases sizes left number bases left side right number bases right side fraction define flanks based fraction interval length strand define left right based strand trim adjust coordinates --bounds intervals ... extra arguments (used)","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_slop.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Increase the size of input intervals. — bed_slop","text":"ivl_df","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_slop.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Increase the size of input intervals. — bed_slop","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 110, 120, \"chr1\", 225, 235 ) genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 400 ) bed_glyph(bed_slop(x, genome, both = 20, trim = TRUE)) genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 5000 ) x <- tibble::tribble( ~chrom, ~start, ~end, ~name, ~score, ~strand, \"chr1\", 500, 1000, \".\", \".\", \"+\", \"chr1\", 1000, 1500, \".\", \".\", \"-\" ) bed_slop(x, genome, left = 100) #> # A tibble: 2 × 6 #> chrom start end name score strand #> #> 1 chr1 400 1000 . . + #> 2 chr1 900 1500 . . - bed_slop(x, genome, right = 100) #> # A tibble: 2 × 6 #> chrom start end name score strand #> #> 1 chr1 500 1100 . . + #> 2 chr1 1000 1600 . . - bed_slop(x, genome, both = 100) #> # A tibble: 2 × 6 #> chrom start end name score strand #> #> 1 chr1 400 1100 . . + #> 2 chr1 900 1600 . . - bed_slop(x, genome, both = 0.5, fraction = TRUE) #> # A tibble: 2 × 6 #> chrom start end name score strand #> #> 1 chr1 250 1250 . . + #> 2 chr1 750 1750 . . -"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_sort.html","id":null,"dir":"Reference","previous_headings":"","what":"Sort a set of intervals. — bed_sort","title":"Sort a set of intervals. — bed_sort","text":"Sort set intervals.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_sort.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Sort a set of intervals. — bed_sort","text":"","code":"bed_sort(x, by_size = FALSE, by_chrom = FALSE, reverse = FALSE)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_sort.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Sort a set of intervals. — bed_sort","text":"x ivl_df by_size sort interval size by_chrom sort within chromosome reverse reverse sort order","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_sort.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Sort a set of intervals. — bed_sort","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr8\", 500, 1000, \"chr8\", 1000, 5000, \"chr8\", 100, 200, \"chr1\", 100, 300, \"chr1\", 100, 200 ) # sort by chrom and start bed_sort(x) #> # A tibble: 5 × 3 #> chrom start end #> #> 1 chr1 100 200 #> 2 chr1 100 300 #> 3 chr8 100 200 #> 4 chr8 500 1000 #> 5 chr8 1000 5000 # reverse sort order bed_sort(x, reverse = TRUE) #> # A tibble: 5 × 3 #> chrom start end #> #> 1 chr1 100 300 #> 2 chr1 100 200 #> 3 chr8 1000 5000 #> 4 chr8 500 1000 #> 5 chr8 100 200 # sort by interval size bed_sort(x, by_size = TRUE) #> # A tibble: 5 × 3 #> chrom start end #> #> 1 chr8 100 200 #> 2 chr1 100 200 #> 3 chr1 100 300 #> 4 chr8 500 1000 #> 5 chr8 1000 5000 # sort by decreasing interval size bed_sort(x, by_size = TRUE, reverse = TRUE) #> # A tibble: 5 × 3 #> chrom start end #> #> 1 chr8 1000 5000 #> 2 chr8 500 1000 #> 3 chr1 100 300 #> 4 chr8 100 200 #> 5 chr1 100 200 # sort by interval size within chrom bed_sort(x, by_size = TRUE, by_chrom = TRUE) #> # A tibble: 5 × 3 #> chrom start end #> #> 1 chr1 100 200 #> 2 chr1 100 300 #> 3 chr8 100 200 #> 4 chr8 500 1000 #> 5 chr8 1000 5000"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_subtract.html","id":null,"dir":"Reference","previous_headings":"","what":"Subtract two sets of intervals. — bed_subtract","title":"Subtract two sets of intervals. — bed_subtract","text":"Subtract y intervals x intervals.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_subtract.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Subtract two sets of intervals. — bed_subtract","text":"","code":"bed_subtract(x, y, any = FALSE)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_subtract.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Subtract two sets of intervals. — bed_subtract","text":"x ivl_df y ivl_df remove x intervals overlap y","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_subtract.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Subtract two sets of intervals. — bed_subtract","text":"input tbls grouped chrom default, additional groups can added using dplyr::group_by(). example, grouping strand constrain analyses strand. compare opposing strands across two tbls, strands y tbl can first inverted using flip_strands().","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_subtract.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Subtract two sets of intervals. — bed_subtract","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 1, 100 ) y <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 50, 75 ) bed_glyph(bed_subtract(x, y)) x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 100, 200, \"chr1\", 250, 400, \"chr1\", 500, 600, \"chr1\", 1000, 1200, \"chr1\", 1300, 1500 ) y <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 150, 175, \"chr1\", 510, 525, \"chr1\", 550, 575, \"chr1\", 900, 1050, \"chr1\", 1150, 1250, \"chr1\", 1299, 1501 ) bed_subtract(x, y) #> # A tibble: 7 × 3 #> chrom start end #> #> 1 chr1 100 150 #> 2 chr1 175 200 #> 3 chr1 250 400 #> 4 chr1 500 510 #> 5 chr1 525 550 #> 6 chr1 575 600 #> 7 chr1 1050 1150 bed_subtract(x, y, any = TRUE) #> # A tibble: 1 × 3 #> chrom start end #> #> 1 chr1 250 400"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_window.html","id":null,"dir":"Reference","previous_headings":"","what":"Identify intervals within a specified distance. — bed_window","title":"Identify intervals within a specified distance. — bed_window","text":"Identify intervals within specified distance.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_window.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Identify intervals within a specified distance. — bed_window","text":"","code":"bed_window(x, y, genome, ...)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_window.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Identify intervals within a specified distance. — bed_window","text":"x ivl_df y ivl_df genome genome_df ... params bed_slop bed_intersect","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_window.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Identify intervals within a specified distance. — bed_window","text":"input tbls grouped chrom default, additional groups can added using dplyr::group_by(). example, grouping strand constrain analyses strand. compare opposing strands across two tbls, strands y tbl can first inverted using flip_strands().","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bed_window.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Identify intervals within a specified distance. — bed_window","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 25, 50, \"chr1\", 100, 125 ) y <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 60, 75 ) genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 125 ) bed_glyph(bed_window(x, y, genome, both = 15)) x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 10, 100, \"chr2\", 200, 400, \"chr2\", 300, 500, \"chr2\", 800, 900 ) y <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 150, 400, \"chr2\", 230, 430, \"chr2\", 350, 430 ) genome <- tibble::tribble( ~chrom, ~size, \"chr1\", 500, \"chr2\", 1000 ) bed_window(x, y, genome, both = 100) #> # A tibble: 4 × 7 #> chrom start.x end.x start.y end.y .source .overlap #> #> 1 chr2 200 400 230 430 1 200 #> 2 chr2 200 400 350 430 1 80 #> 3 chr2 300 500 230 430 1 200 #> 4 chr2 300 500 350 430 1 80"},{"path":"https://rnabioco.github.io/valr/dev/reference/bound_intervals.html","id":null,"dir":"Reference","previous_headings":"","what":"Select intervals bounded by a genome. — bound_intervals","title":"Select intervals bounded by a genome. — bound_intervals","text":"Used remove --bounds intervals, trim interval coordinates using genome.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bound_intervals.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Select intervals bounded by a genome. — bound_intervals","text":"","code":"bound_intervals(x, genome, trim = FALSE)"},{"path":"https://rnabioco.github.io/valr/dev/reference/bound_intervals.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Select intervals bounded by a genome. — bound_intervals","text":"x ivl_df genome genome_df trim adjust coordinates --bounds intervals","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/bound_intervals.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Select intervals bounded by a genome. — bound_intervals","text":"ivl_df","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/bound_intervals.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Select intervals bounded by a genome. — bound_intervals","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", -100, 500, \"chr1\", 100, 1e9, \"chr1\", 500, 1000 ) genome <- read_genome(valr_example(\"hg19.chrom.sizes.gz\")) # out-of-bounds are removed by default ... bound_intervals(x, genome) #> # A tibble: 1 × 3 #> chrom start end #> #> 1 chr1 500 1000 # ... or can be trimmed within the bounds of a genome bound_intervals(x, genome, trim = TRUE) #> # A tibble: 3 × 3 #> chrom start end #> #> 1 chr1 0 500 #> 2 chr1 100 249250621 #> 3 chr1 500 1000"},{"path":"https://rnabioco.github.io/valr/dev/reference/create_introns.html","id":null,"dir":"Reference","previous_headings":"","what":"Create intron features. — create_introns","title":"Create intron features. — create_introns","text":"Numbers score column intron numbers 5' 3' independent strand. .e., first introns + - strand genes score values 1.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/create_introns.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create intron features. — create_introns","text":"","code":"create_introns(x)"},{"path":"https://rnabioco.github.io/valr/dev/reference/create_introns.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create intron features. — create_introns","text":"x ivl_df BED12 format","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/create_introns.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create intron features. — create_introns","text":"","code":"x <- read_bed12(valr_example(\"mm9.refGene.bed.gz\")) create_introns(x) #> # A tibble: 1,583 × 6 #> chrom start end name score strand #> #> 1 chr1 3207049 3411782 NM_001011874 2 - #> 2 chr1 3411982 3660632 NM_001011874 1 - #> 3 chr1 4283093 4341990 NM_001195662 3 - #> 4 chr1 4342162 4342282 NM_001195662 2 - #> 5 chr1 4342918 4399250 NM_001195662 1 - #> 6 chr1 4848057 4857550 NM_001159750 1 + #> 7 chr1 4848057 4857550 NM_011541 1 + #> 8 chr1 4848584 4857550 NM_001159751 1 + #> 9 chr1 4857613 4868107 NM_001159750 2 + #> 10 chr1 4857613 4868107 NM_011541 2 + #> # ℹ 1,573 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/create_tss.html","id":null,"dir":"Reference","previous_headings":"","what":"Create transcription start site features. — create_tss","title":"Create transcription start site features. — create_tss","text":"Create transcription start site features.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/create_tss.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create transcription start site features. — create_tss","text":"","code":"create_tss(x)"},{"path":"https://rnabioco.github.io/valr/dev/reference/create_tss.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create transcription start site features. — create_tss","text":"x ivl_df BED format","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/create_tss.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create transcription start site features. — create_tss","text":"","code":"x <- read_bed12(valr_example(\"mm9.refGene.bed.gz\")) create_tss(x) #> # A tibble: 100 × 6 #> chrom start end name score strand #> #> 1 chr1 3661578 3661579 NM_001011874 0 - #> 2 chr1 4399321 4399322 NM_001195662 0 - #> 3 chr1 4847774 4847775 NM_001159750 0 + #> 4 chr1 4847774 4847775 NM_011541 0 + #> 5 chr1 4848408 4848409 NM_001159751 0 + #> 6 chr1 5008814 5008815 NM_001290372 0 - #> 7 chr1 5009619 5009620 NM_021374 0 - #> 8 chr1 5060365 5060366 NM_001177795 0 - #> 9 chr1 5073166 5073167 NM_001310442 0 + #> 10 chr1 5073166 5073167 NM_133826 0 + #> # ℹ 90 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/create_utrs3.html","id":null,"dir":"Reference","previous_headings":"","what":"Create 3' UTR features. — create_utrs3","title":"Create 3' UTR features. — create_utrs3","text":"Create 3' UTR features.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/create_utrs3.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create 3' UTR features. — create_utrs3","text":"","code":"create_utrs3(x)"},{"path":"https://rnabioco.github.io/valr/dev/reference/create_utrs3.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create 3' UTR features. — create_utrs3","text":"x ivl_df BED12 format","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/create_utrs3.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create 3' UTR features. — create_utrs3","text":"","code":"x <- read_bed12(valr_example(\"mm9.refGene.bed.gz\")) create_utrs3(x) #> # A tibble: 99 × 6 #> chrom start end name score strand #> #> 1 chr1 3204562 3206102 NM_001011874 0 - #> 2 chr1 4280926 4283061 NM_001195662 0 - #> 3 chr1 4886445 4887990 NM_001159750 0 + #> 4 chr1 4886445 4887990 NM_011541 0 + #> 5 chr1 4886445 4887990 NM_001159751 0 + #> 6 chr1 4899656 4900554 NM_001290372 0 - #> 7 chr1 4899656 4900554 NM_021374 0 - #> 8 chr1 4899656 4900554 NM_001177795 0 - #> 9 chr1 5152246 5152630 NM_001310442 0 + #> 10 chr1 5152246 5152630 NM_133826 0 + #> # ℹ 89 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/create_utrs5.html","id":null,"dir":"Reference","previous_headings":"","what":"Create 5' UTR features. — create_utrs5","title":"Create 5' UTR features. — create_utrs5","text":"Create 5' UTR features.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/create_utrs5.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create 5' UTR features. — create_utrs5","text":"","code":"create_utrs5(x)"},{"path":"https://rnabioco.github.io/valr/dev/reference/create_utrs5.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create 5' UTR features. — create_utrs5","text":"x ivl_df BED12 format","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/create_utrs5.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create 5' UTR features. — create_utrs5","text":"","code":"x <- read_bed12(valr_example(\"mm9.refGene.bed.gz\")) create_utrs5(x) #> # A tibble: 97 × 6 #> chrom start end name score strand #> #> 1 chr1 3661429 3661579 NM_001011874 0 - #> 2 chr1 4399268 4399322 NM_001195662 0 - #> 3 chr1 4847774 4847994 NM_001159750 0 + #> 4 chr1 4847774 4847994 NM_011541 0 + #> 5 chr1 4848408 4848488 NM_001159751 0 + #> 6 chr1 4914046 5008815 NM_001290372 0 - #> 7 chr1 5009460 5009620 NM_021374 0 - #> 8 chr1 5060258 5060366 NM_001177795 0 - #> 9 chr1 5073166 5074531 NM_001310442 0 + #> 10 chr1 5073166 5074531 NM_133826 0 + #> # ℹ 87 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/db.html","id":null,"dir":"Reference","previous_headings":"","what":"Fetch data from remote databases. — db","title":"Fetch data from remote databases. — db","text":"Currently db_ucsc db_ensembl available connections.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/db.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fetch data from remote databases. — db","text":"","code":"db_ucsc( dbname, host = \"genome-mysql.cse.ucsc.edu\", user = \"genomep\", password = \"password\", port = 3306, ... ) db_ensembl( dbname, host = \"ensembldb.ensembl.org\", user = \"anonymous\", password = \"\", port = 3306, ... )"},{"path":"https://rnabioco.github.io/valr/dev/reference/db.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fetch data from remote databases. — db","text":"dbname name database host hostname user username password password port MySQL connection port ... params connection","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/db.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fetch data from remote databases. — db","text":"","code":"if (FALSE) { if (require(RMariaDB)) { library(dplyr) ucsc <- db_ucsc(\"hg38\") # fetch the `refGene` tbl tbl(ucsc, \"refGene\") # the `chromInfo` tbls have size information tbl(ucsc, \"chromInfo\") } } if (FALSE) { if (require(RMariaDB)) { library(dplyr) # squirrel genome ensembl <- db_ensembl(\"spermophilus_tridecemlineatus_core_67_2\") tbl(ensembl, \"gene\") } }"},{"path":"https://rnabioco.github.io/valr/dev/reference/flip_strands.html","id":null,"dir":"Reference","previous_headings":"","what":"Flip strands in intervals. — flip_strands","title":"Flip strands in intervals. — flip_strands","text":"Flips positive (+) stranded intervals negative (-) strands, vice-versa. Facilitates comparisons among intervals opposing strands.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/flip_strands.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Flip strands in intervals. — flip_strands","text":"","code":"flip_strands(x)"},{"path":"https://rnabioco.github.io/valr/dev/reference/flip_strands.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Flip strands in intervals. — flip_strands","text":"x ivl_df","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/flip_strands.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Flip strands in intervals. — flip_strands","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, ~strand, \"chr1\", 1, 100, \"+\", \"chr2\", 1, 100, \"-\" ) flip_strands(x) #> # A tibble: 2 × 4 #> chrom start end strand #> #> 1 chr1 1 100 - #> 2 chr2 1 100 +"},{"path":"https://rnabioco.github.io/valr/dev/reference/gr_to_bed.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert Granges to bed tibble — gr_to_bed","title":"Convert Granges to bed tibble — gr_to_bed","text":"Convert Granges bed tibble","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/gr_to_bed.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert Granges to bed tibble — gr_to_bed","text":"","code":"gr_to_bed(x)"},{"path":"https://rnabioco.github.io/valr/dev/reference/gr_to_bed.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert Granges to bed tibble — gr_to_bed","text":"x GRanges object convert bed tibble.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/gr_to_bed.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert Granges to bed tibble — gr_to_bed","text":"tibble::tibble()","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/gr_to_bed.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert Granges to bed tibble — gr_to_bed","text":"","code":"if (FALSE) { gr <- GenomicRanges::GRanges( seqnames = S4Vectors::Rle( c(\"chr1\", \"chr2\", \"chr1\", \"chr3\"), c(1, 1, 1, 1) ), ranges = IRanges::IRanges( start = c(1, 10, 50, 100), end = c(100, 500, 1000, 2000), names = head(letters, 4) ), strand = S4Vectors::Rle( c(\"-\", \"+\"), c(2, 2) ) ) gr_to_bed(gr) # There are two ways to convert a bed-like data.frame to GRanges: gr <- GenomicRanges::GRanges( seqnames = S4Vectors::Rle(x$chrom), ranges = IRanges::IRanges( start = x$start + 1, end = x$end, names = x$name ), strand = S4Vectors::Rle(x$strand) ) # or: gr <- GenomicRanges::makeGRangesFromDataFrame(dplyr::mutate(x, start = start + 1)) }"},{"path":"https://rnabioco.github.io/valr/dev/reference/id.html","id":null,"dir":"Reference","previous_headings":"","what":"Plyr function id packaged due to plyr being retired\nCompute a unique numeric id for each unique row in a data frame. — id","title":"Plyr function id packaged due to plyr being retired\nCompute a unique numeric id for each unique row in a data frame. — id","text":"Properties: order(id) equivalent .call(order, df) rows containing data value drop = FALSE room possibilites","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/id.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plyr function id packaged due to plyr being retired\nCompute a unique numeric id for each unique row in a data frame. — id","text":"","code":"id(.variables, drop = FALSE)"},{"path":"https://rnabioco.github.io/valr/dev/reference/id.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plyr function id packaged due to plyr being retired\nCompute a unique numeric id for each unique row in a data frame. — id","text":".variables list variables drop drop unusued factor levels?","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/id.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plyr function id packaged due to plyr being retired\nCompute a unique numeric id for each unique row in a data frame. — id","text":"numeric vector attribute n, giving total number possibilities","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/id_var.html","id":null,"dir":"Reference","previous_headings":"","what":"Plyr function id_var packaged due to plyr being retired\nNumeric id for a vector. — id_var","title":"Plyr function id_var packaged due to plyr being retired\nNumeric id for a vector. — id_var","text":"Plyr function id_var packaged due plyr retired Numeric id vector.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/id_var.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plyr function id_var packaged due to plyr being retired\nNumeric id for a vector. — id_var","text":"","code":"id_var(x, drop = FALSE)"},{"path":"https://rnabioco.github.io/valr/dev/reference/interval_spacing.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate interval spacing. — interval_spacing","title":"Calculate interval spacing. — interval_spacing","text":"Spacing first interval chromosome undefined (NA). leading interval overlapping interval pair negative value.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/interval_spacing.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate interval spacing. — interval_spacing","text":"","code":"interval_spacing(x)"},{"path":"https://rnabioco.github.io/valr/dev/reference/interval_spacing.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate interval spacing. — interval_spacing","text":"x ivl_df","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/interval_spacing.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate interval spacing. — interval_spacing","text":"ivl_df .spacing column.","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/interval_spacing.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate interval spacing. — interval_spacing","text":"","code":"x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 1, 100, \"chr1\", 150, 200, \"chr2\", 200, 300 ) interval_spacing(x) #> # A tibble: 3 × 4 #> chrom start end .spacing #> #> 1 chr1 1 100 NA #> 2 chr1 150 200 50 #> 3 chr2 200 300 NA"},{"path":"https://rnabioco.github.io/valr/dev/reference/ivl_df.html","id":null,"dir":"Reference","previous_headings":"","what":"Bed-like data.frame requirements for valr functions — ivl_df","title":"Bed-like data.frame requirements for valr functions — ivl_df","text":"Required column names interval dataframes chrom, start end. Internally interval dataframes validated using check_interval() Required column names genome dataframes chrom size. Internally genome dataframes validated using check_genome().","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/ivl_df.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Bed-like data.frame requirements for valr functions — ivl_df","text":"","code":"check_interval(x) check_genome(x)"},{"path":"https://rnabioco.github.io/valr/dev/reference/ivl_df.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Bed-like data.frame requirements for valr functions — ivl_df","text":"x data.frame tibble::tibble","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/ivl_df.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Bed-like data.frame requirements for valr functions — ivl_df","text":"","code":"# using tibble x <- tibble::tribble( ~chrom, ~start, ~end, \"chr1\", 1, 50, \"chr1\", 10, 75, \"chr1\", 100, 120 ) check_interval(x) #> # A tibble: 3 × 3 #> chrom start end #> #> 1 chr1 1 50 #> 2 chr1 10 75 #> 3 chr1 100 120 # using base R data.frame x <- data.frame( chrom = \"chr1\", start = 0, end = 100, stringsAsFactors = FALSE ) check_interval(x) #> # A tibble: 1 × 3 #> chrom start end #> #> 1 chr1 0 100 # example genome input x <- tibble::tribble( ~chrom, ~size, \"chr1\", 1e6 ) check_genome(x) #> # A tibble: 1 × 2 #> chrom size #> #> 1 chr1 1000000"},{"path":"https://rnabioco.github.io/valr/dev/reference/read_bed.html","id":null,"dir":"Reference","previous_headings":"","what":"Read BED and related files. — read_bed","title":"Read BED and related files. — read_bed","text":"read functions BED related formats. Filenames can local file URLs. read functions load data tbls consistent chrom, start end colnames.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_bed.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Read BED and related files. — read_bed","text":"","code":"read_bed( filename, col_types = bed12_coltypes, sort = TRUE, ..., n_fields = NULL ) read_bed12(filename, ...) read_bedgraph(filename, ...) read_narrowpeak(filename, ...) read_broadpeak(filename, ...)"},{"path":"https://rnabioco.github.io/valr/dev/reference/read_bed.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Read BED and related files. — read_bed","text":"filename file URL col_types column type spec readr::read_tsv() sort sort tbl chrom start ... options pass readr::read_tsv() n_fields","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_bed.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Read BED and related files. — read_bed","text":"ivl_df","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_bed.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Read BED and related files. — read_bed","text":"https://genome.ucsc.edu/FAQ/FAQformat.html#format1 https://genome.ucsc.edu/FAQ/FAQformat.html#format1 https://genome.ucsc.edu/goldenPath/help/bedgraph.html https://genome.ucsc.edu/FAQ/FAQformat.html#format12 https://genome.ucsc.edu/FAQ/FAQformat.html#format13","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/read_bed.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Read BED and related files. — read_bed","text":"","code":"# read_bed assumes 3 field BED format. read_bed(valr_example(\"3fields.bed.gz\")) #> # A tibble: 10 × 3 #> chrom start end #> #> 1 chr1 11873 14409 #> 2 chr1 14361 19759 #> 3 chr1 14406 29370 #> 4 chr1 34610 36081 #> 5 chr1 69090 70008 #> 6 chr1 134772 140566 #> 7 chr1 321083 321115 #> 8 chr1 321145 321207 #> 9 chr1 322036 326938 #> 10 chr1 327545 328439 # result is sorted by chrom and start unless `sort = FALSE` read_bed(valr_example(\"3fields.bed.gz\"), sort = FALSE) #> # A tibble: 10 × 3 #> chrom start end #> #> 1 chr1 11873 14409 #> 2 chr1 14361 19759 #> 3 chr1 14406 29370 #> 4 chr1 34610 36081 #> 5 chr1 69090 70008 #> 6 chr1 134772 140566 #> 7 chr1 321083 321115 #> 8 chr1 321145 321207 #> 9 chr1 322036 326938 #> 10 chr1 327545 328439 read_bed12(valr_example(\"mm9.refGene.bed.gz\")) #> # A tibble: 100 × 12 #> chrom start end name score strand cds_start cds_end item_rgb #> #> 1 chr1 3204562 3661579 NM_00101… 0 - 3206102 3661429 0 #> 2 chr1 4280926 4399322 NM_00119… 0 - 4283061 4399268 0 #> 3 chr1 4847774 4887990 NM_00115… 0 + 4847994 4886445 0 #> 4 chr1 4847774 4887990 NM_011541 0 + 4847994 4886445 0 #> 5 chr1 4848408 4887990 NM_00115… 0 + 4848488 4886445 0 #> 6 chr1 4899656 5008815 NM_00129… 0 - 4900554 4914046 0 #> 7 chr1 4899656 5009620 NM_021374 0 - 4900554 5009460 0 #> 8 chr1 4899656 5060366 NM_00117… 0 - 4900554 5060258 0 #> 9 chr1 5073166 5152630 NM_00131… 0 + 5074531 5152246 0 #> 10 chr1 5073166 5152630 NM_133826 0 + 5074531 5152246 0 #> # ℹ 90 more rows #> # ℹ 3 more variables: exon_count , exon_sizes , #> # exon_starts read_bedgraph(valr_example(\"test.bg.gz\")) #> # A tibble: 4 × 4 #> chrom start end value #> #> 1 chr19 49302000 49302300 -1 #> 2 chr19 49302300 49302600 -0.75 #> 3 chr19 49302600 49302900 -0.5 #> 4 chr19 49302900 49303200 -0.25 read_narrowpeak(valr_example(\"sample.narrowPeak.gz\")) #> # A tibble: 570 × 10 #> chrom start end name score strand signal pvalue qvalue peak #> #> 1 chr22 17372940 17373090 . 0 . 4 4.63 -1 -1 #> 2 chr22 17392200 17392350 . 0 . 5 4.67 -1 -1 #> 3 chr22 17398400 17398550 . 0 . 10 11.6 -1 -1 #> 4 chr22 17539180 17539330 . 0 . 21 30.9 -1 -1 #> 5 chr22 17652440 17652590 . 0 . 6 5.35 -1 -1 #> 6 chr22 17652780 17652930 . 0 . 12 12.5 -1 -1 #> 7 chr22 17980800 17980950 . 0 . 12 12.6 -1 -1 #> 8 chr22 18038260 18038410 . 0 . 29 36.0 -1 -1 #> 9 chr22 18225280 18225430 . 0 . 21 25.0 -1 -1 #> 10 chr22 18268020 18268170 . 0 . 14 13.0 -1 -1 #> # ℹ 560 more rows read_broadpeak(valr_example(\"sample.broadPeak.gz\")) #> # A tibble: 1,181 × 9 #> chrom start end name score strand signal pvalue qvalue #> #> 1 chr22 16847903 16848440 . 503 . 10.5 2.5 -1 #> 2 chr22 16849452 16851326 . 483 . 9.81 15.7 -1 #> 3 chr22 16849955 16850086 . 1000 . 32.4 4.2 -1 #> 4 chr22 16850694 16850924 . 831 . 22.5 4.9 -1 #> 5 chr22 16852964 16853782 . 499 . 10.4 6.2 -1 #> 6 chr22 16855065 16855803 . 477 . 9.58 3.9 -1 #> 7 chr22 16855944 16856974 . 491 . 10.1 8.5 -1 #> 8 chr22 16857425 16857958 . 505 . 10.6 2.5 -1 #> 9 chr22 16858284 16858824 . 549 . 12.2 4.5 -1 #> 10 chr22 16859972 16862024 . 404 . 6.89 9.3 -1 #> # ℹ 1,171 more rows"},{"path":"https://rnabioco.github.io/valr/dev/reference/read_bigwig.html","id":null,"dir":"Reference","previous_headings":"","what":"Import and convert a bigwig file into a valr compatible tbl — read_bigwig","title":"Import and convert a bigwig file into a valr compatible tbl — read_bigwig","text":"function output 5 column tibble zero-based chrom, start, end, score, strand columns.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_bigwig.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Import and convert a bigwig file into a valr compatible tbl — read_bigwig","text":"","code":"read_bigwig(path, set_strand = \"+\")"},{"path":"https://rnabioco.github.io/valr/dev/reference/read_bigwig.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Import and convert a bigwig file into a valr compatible tbl — read_bigwig","text":"path path bigWig file set_strand strand add output (defaults \"+\")","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_bigwig.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Import and convert a bigwig file into a valr compatible tbl — read_bigwig","text":"functions uses rtracklayer import bigwigs unstable support windows platform therefore may error windows users (particularly 32 bit window users).","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_bigwig.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Import and convert a bigwig file into a valr compatible tbl — read_bigwig","text":"","code":"if (FALSE) { if (.Platform$OS.type != \"windows\") { bw <- read_bigwig(valr_example(\"hg19.dnase1.bw\")) head(bw) } }"},{"path":"https://rnabioco.github.io/valr/dev/reference/read_genome.html","id":null,"dir":"Reference","previous_headings":"","what":"Read genome files. — read_genome","title":"Read genome files. — read_genome","text":"Genome files (UCSC \"chromSize\" files) contain chromosome name size information. sizes used downstream functions identify computed intervals coordinates outside genome bounds.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_genome.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Read genome files. — read_genome","text":"","code":"read_genome(path)"},{"path":"https://rnabioco.github.io/valr/dev/reference/read_genome.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Read genome files. — read_genome","text":"path containing chrom/contig names sizes, one-pair-per-line, tab-delimited","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_genome.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Read genome files. — read_genome","text":"genome_df, sorted size","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_genome.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Read genome files. — read_genome","text":"URLs genome files can also used.","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/read_genome.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Read genome files. — read_genome","text":"","code":"read_genome(valr_example(\"hg19.chrom.sizes.gz\")) #> # A tibble: 25 × 2 #> chrom size #> #> 1 chr1 249250621 #> 2 chr2 243199373 #> 3 chr3 198022430 #> 4 chr4 191154276 #> 5 chr5 180915260 #> 6 chr6 171115067 #> 7 chr7 159138663 #> 8 chrX 155270560 #> 9 chr8 146364022 #> 10 chr9 141213431 #> # ℹ 15 more rows if (FALSE) { # `read_genome` accepts a URL read_genome(\"https://genome.ucsc.edu/goldenpath/help/hg19.chrom.sizes\") }"},{"path":"https://rnabioco.github.io/valr/dev/reference/read_gtf.html","id":null,"dir":"Reference","previous_headings":"","what":"Import and convert a GTF/GFF file into a valr compatible bed tbl format — read_gtf","title":"Import and convert a GTF/GFF file into a valr compatible bed tbl format — read_gtf","text":"function output tibble required chrom, start, end columns, well columns depending content GTF/GFF file.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_gtf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Import and convert a GTF/GFF file into a valr compatible bed tbl format — read_gtf","text":"","code":"read_gtf(path, zero_based = TRUE)"},{"path":"https://rnabioco.github.io/valr/dev/reference/read_gtf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Import and convert a GTF/GFF file into a valr compatible bed tbl format — read_gtf","text":"path path gtf gff file zero_based TRUE, convert zero based","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_gtf.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Import and convert a GTF/GFF file into a valr compatible bed tbl format — read_gtf","text":"","code":"gtf <- read_gtf(valr_example(\"hg19.gencode.gtf.gz\")) head(gtf) #> # A tibble: 6 × 26 #> chrom start end width strand source type score phase gene_id #> #> 1 chr2 43449540 43453748 4208 - HAVANA gene NA NA ENSG00… #> 2 chr2 43449540 43453748 4208 - HAVANA transcr… NA NA ENSG00… #> 3 chr2 43453403 43453748 345 - HAVANA exon NA NA ENSG00… #> 4 chr2 43453403 43453454 51 - HAVANA CDS NA 0 ENSG00… #> 5 chr2 43453451 43453454 3 - HAVANA start_c… NA 0 ENSG00… #> 6 chr2 43449540 43452891 3351 - HAVANA exon NA NA ENSG00… #> # ℹ 16 more variables: transcript_id , gene_type , #> # gene_status , gene_name , transcript_type , #> # transcript_status , transcript_name , level , #> # havana_gene , protein_id , tag , ccdsid , #> # havana_transcript , exon_number , exon_id , ont "},{"path":"https://rnabioco.github.io/valr/dev/reference/read_vcf.html","id":null,"dir":"Reference","previous_headings":"","what":"Read a VCF file. — read_vcf","title":"Read a VCF file. — read_vcf","text":"Read VCF file.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_vcf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Read a VCF file. — read_vcf","text":"","code":"read_vcf(vcf)"},{"path":"https://rnabioco.github.io/valr/dev/reference/read_vcf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Read a VCF file. — read_vcf","text":"vcf vcf filename","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_vcf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Read a VCF file. — read_vcf","text":"data_frame","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/read_vcf.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Read a VCF file. — read_vcf","text":"return value chrom, start end columns. Interval lengths size 'REF' field.","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/read_vcf.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Read a VCF file. — read_vcf","text":"","code":"vcf_file <- valr_example(\"test.vcf.gz\") read_vcf(vcf_file) #> # A tibble: 11 × 18 #> CHROM POS ID REF ALT QUAL FILTER INFO FORMAT X1 X2 #> #> 1 1 10 1:10 A T 100 PASS NS=5;A… GT 0/0 ./. #> 2 1 20 1:20 G C 100 PASS NS=0;A… GT ./. ./. #> 3 1 30 1:30 C A 100 PASS NS=6;A… GT 0/0 0/0 #> 4 1 40 1:40 A C 100 PASS NS=6;A… GT 0/0 0/0 #> 5 1 10000 1:10000 G C 100 PASS NS=6;A… GT 0/0 0/0 #> 6 1 20000 1:20000 T A 100 PASS NS=6;A… GT 1/1 1/1 #> 7 4 5000 4:5000 A T 100 PASS NS=6;A… GT 1/1 1/1 #> 8 4 6000 4:6000 C T 100 PASS NS=6;A… GT 1/1 1/1 #> 9 X 800 X:800 A C 100 PASS NS=6;A… GT 1/1 1/1 #> 10 X 900 X:900 A T 100 PASS NS=6;A… GT 1/1 1/1 #> 11 X 1000 X:1000 T G 100 PASS NS=5;A… GT 1/1 1/1 #> # ℹ 7 more variables: X3 , X4 , X5 , X6 , #> # chrom , start , end "},{"path":"https://rnabioco.github.io/valr/dev/reference/valr.html","id":null,"dir":"Reference","previous_headings":"","what":"valr: genome interval arithmetic in R — valr","title":"valr: genome interval arithmetic in R — valr","text":"valr provides tools read manipulate intervals signals genome reference. valr developed facilitate interactive analysis genome-scale data sets, leveraging power dplyr piping.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/valr.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"valr: genome interval arithmetic in R — valr","text":"learn valr, start vignette: browseVignettes(package = \"valr\")","code":""},{"path":[]},{"path":"https://rnabioco.github.io/valr/dev/reference/valr.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"valr: genome interval arithmetic in R — valr","text":"Jay Hesselberth jay.hesselberth@gmail.com Kent Riemondy kent.riemondy@gmail.com","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/valr_example.html","id":null,"dir":"Reference","previous_headings":"","what":"Provide working directory for valr example files. — valr_example","title":"Provide working directory for valr example files. — valr_example","text":"Provide working directory valr example files.","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/valr_example.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Provide working directory for valr example files. — valr_example","text":"","code":"valr_example(path)"},{"path":"https://rnabioco.github.io/valr/dev/reference/valr_example.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Provide working directory for valr example files. — valr_example","text":"path path file","code":""},{"path":"https://rnabioco.github.io/valr/dev/reference/valr_example.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Provide working directory for valr example files. — valr_example","text":"","code":"valr_example(\"hg19.chrom.sizes.gz\") #> [1] \"/home/runner/work/_temp/Library/valr/extdata/hg19.chrom.sizes.gz\""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-080","dir":"Changelog","previous_headings":"","what":"valr 0.8.0","title":"valr 0.8.0","text":"Added bed_genomecov() compute interval coverage across genome.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-070","dir":"Changelog","previous_headings":"","what":"valr 0.7.0","title":"valr 0.7.0","text":"CRAN release: 2023-09-18 read_bed related functions now automatically calculate fields. Use n_fields deprecated.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-068","dir":"Changelog","previous_headings":"","what":"valr 0.6.8","title":"valr 0.6.8","text":"CRAN release: 2023-05-16 bed_closest() now reports x intervals, even closest y intervals (e.g. matching chromosome y intervals). intervals returned populated NA .overlap, .dist y interval locations. Reimplemented bed_closest() use binary search rather interval tree search. closest y interval can missed previous search strategy high depth interval trees. Fix one error using max_dist argument bed_cluster() (#401).","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-067","dir":"Changelog","previous_headings":"","what":"valr 0.6.7","title":"valr 0.6.7","text":"CRAN release: 2023-02-18 Removed SystemRequirements DESCRIPTION eliminate NOTE CRAN. bed_coverage() now reports intervals x matching group y (#395).","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-066","dir":"Changelog","previous_headings":"","what":"valr 0.6.6","title":"valr 0.6.6","text":"CRAN release: 2022-10-11 Updated intervalTree header commit f0c4046 valr now uses cli consistent errors messages interactive use. deprecated genome argument bed_makewindows() removed.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-065","dir":"Changelog","previous_headings":"","what":"valr 0.6.5","title":"valr 0.6.5","text":"CRAN release: 2022-08-19 Handle max_dist first intervals bed_cluster() (#388)","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-064","dir":"Changelog","previous_headings":"","what":"valr 0.6.4","title":"valr 0.6.4","text":"CRAN release: 2021-12-08 Fixed intron score numbering error create_introns (#377 @sheridar) Fixed bug handling list inputs bed_intersect()(#380 @sheridar) Added read_bigwig read_gtf functions import data valr compatible tibbles (#379) Kent Riemondy now maintainer.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-063","dir":"Changelog","previous_headings":"","what":"valr 0.6.3","title":"valr 0.6.3","text":"CRAN release: 2021-05-15 Update prepare readr 2.0.0","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-062","dir":"Changelog","previous_headings":"","what":"valr 0.6.2","title":"valr 0.6.2","text":"CRAN release: 2020-10-07","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"minor-changes-0-6-2","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"valr 0.6.2","text":"RMariaDB replaced deprecated RMySQL package database backend. valr now imports Rcpp, always case, masked Import readr, recently dropped use Rcpp.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-061","dir":"Changelog","previous_headings":"","what":"valr 0.6.1","title":"valr 0.6.1","text":"CRAN release: 2020-05-08","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"bug-fixes-0-6-1","dir":"Changelog","previous_headings":"","what":"Bug Fixes","title":"valr 0.6.1","text":"Fixed rchk unprotect error (#365)","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-060","dir":"Changelog","previous_headings":"","what":"valr 0.6.0","title":"valr 0.6.0","text":"CRAN release: 2020-05-04","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"major-changes-0-6-0","dir":"Changelog","previous_headings":"","what":"Major changes","title":"valr 0.6.0","text":"trbl_interval() trbl_genome() custom tibble subclasses deemed unnecessary removed package. coercing GRanges valr compatible data.frame now uses gr_to_bed() function rather .trbl_interal() methods.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"minor-changes-0-6-0","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"valr 0.6.0","text":"dplyr version < 0.8.0 longer supported due unnecessary code bloat challenges handling multiple grouping structures (#359). sort_by argument bed_random() changed sorted, now default use bed_sort() sort output, rather rely naming sorting columns. Sorting can suppressed using sorted = FALSE. bed_sort() now uses base R sorting radix method increased speed. (#353) tbls processed bed_merge()bed_sort() longer store either merged sorted attributes, due attributes rarely checked codebase potential sources unexpected behavior.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"bug-fixes-0-6-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"valr 0.6.0","text":"Fixed bed_closest() prevent erroneous intervals reported adjacent closest intervals present y table. (#348) Factor columns used grouping returned factors rather inappropriately coerced integer vectors (#360)","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-050","dir":"Changelog","previous_headings":"","what":"valr 0.5.0","title":"valr 0.5.0","text":"CRAN release: 2019-01-03","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"major-changes-0-5-0","dir":"Changelog","previous_headings":"","what":"Major changes","title":"valr 0.5.0","text":"Internal Rcpp functions reorganized remove dependencies dplyr C++ functions.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"minor-changes-0-5-0","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"valr 0.5.0","text":"Due internal refactoring Rcpp functions, data.frames containing Numeric, Logical, Integer, Character, List column types supported. Columns containing Raw, Complex, R classes supported issue error. Factors now disallowed grouping variables multiset operations avoid sort order discrepancies, compatibility factor handling dplyr v.0.8.0. Factors now internally type-converted character warning issued.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-042","dir":"Changelog","previous_headings":"","what":"valr 0.4.2","title":"valr 0.4.2","text":"CRAN release: 2018-11-17","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"bug-fixes-0-4-2","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"valr 0.4.2","text":"Changed behavior .tbl_interval() call as_tibble() non-tibble input, prevents groups stripped tibble() input (#338).","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-041","dir":"Changelog","previous_headings":"","what":"valr 0.4.1","title":"valr 0.4.1","text":"CRAN release: 2018-06-08 Added new function, bed_partition(), similar bed_merge() collapses intervals elemental intervals rather maximal overlapping region. bed_partition() also can compute summaries data overlapping intervals. See examples bed_partition() timings vignette('benchmarks') @kriemo. Several explicit comparisons Bioconductor GenomicRanges library included users considering using valr. See examples .tbl_interval() timings vignette('benchmarks').","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-040","dir":"Changelog","previous_headings":"","what":"valr 0.4.0","title":"valr 0.4.0","text":"CRAN release: 2018-01-25","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"minor-changes-0-4-0","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"valr 0.4.0","text":"relevant tests bedtool2 ported valr. Bugs identified corner cases new tests fixed (#328 @raysinesis) bed_jaccard() now works grouped inputs (#216) Update dplyr header files v0.7 bed_intersect() internal intersect_impl refactored enable return non-intersecting intervals. genome argument bed_makewindows() deprecated produce warning used. Also error handling added check warn intervals smaller requested window size makewindows_impl() (#312 @kriemo)","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"bug-fixes-0-4-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"valr 0.4.0","text":"Fixed one error reported distances bed_closest(). Distances reported now bedtools closest behavior (#311). bed_glyph() accepts trbl_intervals named x y (#318). bed_makewindows() now returns number windows specified num_win input intervals evenly divisble num_win, consistent bedtools behavior. output findOverlaps() now sorted subtract_impl() prevent reporting intervals dropped calling bed_subtract() (#316 @kriemo)","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-031","dir":"Changelog","previous_headings":"","what":"valr 0.3.1","title":"valr 0.3.1","text":"CRAN release: 2017-07-22","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"enhancements-0-3-1","dir":"Changelog","previous_headings":"","what":"Enhancements","title":"valr 0.3.1","text":"manuscript describing valr published F1000Research. New S3 generic .tbl_interval() converts GenomicRanges::GRanges objects tbl_interval. New create_tss() creating transcription start sites. Improve documentation interval statistics complex examples.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"minor-changes-0-3-1","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"valr 0.3.1","text":"bed_sort() de-deprecated reduce arrange calls library code.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"bug-fixes-0-3-1","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"valr 0.3.1","text":"bed_merge() now reports start/end columns spec provided (#288)","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-030","dir":"Changelog","previous_headings":"","what":"valr 0.3.0","title":"valr 0.3.0","text":"CRAN release: 2017-06-15","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"enhancements-0-3-0","dir":"Changelog","previous_headings":"","what":"Enhancements","title":"valr 0.3.0","text":"New create_introns(), create_utrs5() create_utrs3() functions generating features BED12 files. Speed-ups bed_makewindows() (~50x), bed_merge() (~4x), bed_flank() (~4x) (thanks @kriemo @sheridar). Thanks sponsors Biofrontiers Hackathon caffeine underlying improvements.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"bug-fixes-0-3-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"valr 0.3.0","text":"intervals bed_random() now sorted properly.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-020","dir":"Changelog","previous_headings":"","what":"valr 0.2.0","title":"valr 0.2.0","text":"CRAN release: 2017-05-05","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"major-changes-0-2-0","dir":"Changelog","previous_headings":"","what":"Major changes","title":"valr 0.2.0","text":"Package dplyr v0.5.0 headers valr remove dplyr LinkingTo dependency. bed_intersect() now accepts multiple tbls intersection (#220 @kriemo). new tbl_interval() tbl_genome() wrap tibbles enforce strict column naming. trbl_interval() trbl_genome() constructors take tibble::tribble() formatting .tbl_interval() .tbl_genome() used check valid classes.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"minor-changes-0-2-0","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"valr 0.2.0","text":"intervals returned bed_random() sorted chrom start default.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"bug-fixes-0-2-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"valr 0.2.0","text":"Merge intervals bed_jaccard() use numeric values calculation (fixes #204).","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-012","dir":"Changelog","previous_headings":"","what":"valr 0.1.2","title":"valr 0.1.2","text":"CRAN release: 2017-03-16","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"major-changes-0-1-2","dir":"Changelog","previous_headings":"","what":"Major changes","title":"valr 0.1.2","text":"Deprecate bed_sort() favor using dplyr::arrange() explicitly (fixes #134).","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"minor-changes-0-1-2","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"valr 0.1.2","text":"add src/init.c calls R_registerRoutines R_useDynamicSymbols address NOTE r-devel Deprecate dist parameter bed_closest() favor using user supplied functions (#182 @kriemo) Make .id values sequential across chroms bed_cluster() output (#171) Transfer repository http://github.com/rnabioco/valr, update links docs. Move shiny app new repo (http://github.com/rnabioco/valrdata). Add Kent Riemondy LICENSE file.","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"bug-fixes-0-1-2","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"valr 0.1.2","text":"bed_merge() now merges contained intervals (#177)","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-011","dir":"Changelog","previous_headings":"","what":"valr 0.1.1","title":"valr 0.1.1","text":"CRAN release: 2016-12-01","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"minor-changes-0-1-1","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"valr 0.1.1","text":"test / vignette guards Suggested RMySQL fixed memory leak absdist.cpp fixed vignette entry names","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"valr-010","dir":"Changelog","previous_headings":"","what":"valr 0.1.0","title":"valr 0.1.0","text":"CRAN release: 2016-11-21","code":""},{"path":"https://rnabioco.github.io/valr/dev/news/index.html","id":"major-changes-0-1-0","dir":"Changelog","previous_headings":"","what":"Major changes","title":"valr 0.1.0","text":"initial release CRAN","code":""}]