BSgenome
Dependencies & Environment
Package-intrinsic requirements from the Bioconductor landing page — reproduce in any R environment.
- Version: 1.80.0 · Bioconductor: 3.23 · R: ≥ 4.6
- Depends: BiocGenerics, S4Vectors, IRanges, Seqinfo, GenomicRanges, Biostrings, BiocIO, rtracklayer
- Imports: matrixStats, XVector, Rsamtools
- Install:
BiocManager::install("BSgenome")
When to Use
- Chromosome Pattern Matching: Finding or counting the occurrences of an arbitrary nucleotide pattern in a specific chromosome using
matchPattern() or countPattern().
- Genome-Wide Dictionary Searches: Finding all occurrences of a constant-width dictionary of patterns across an entire genome using
PDict() and matchPDict().
- Sequence Masking: Applying or toggling masks (e.g., assembly gaps, repeats) on chromosome sequences using
masks() and active() before performing sequence analysis.
When NOT to Use
- For querying remote sequence databases on-the-fly without local storage, use biomaRt instead, as
BSgenome relies on locally installed data packages.
- For extracting transcript or exon sequences, use GenomicFeatures instead, because
BSgenome provides raw chromosome sequences rather than gene models.
Data Requirements
- Genome Package: An installed
BSgenome data package (e.g., BSgenome.Celegans.UCSC.ce2).
- Query Patterns: A dictionary of patterns stored in a FASTA file and loaded as a
DNAStringSet using readDNAStringSet().
Key Parameters
- max.mismatch (default): Allows inexact matching by specifying the maximum number of mismatching letters per match in
matchPattern().
- fixed (default): Logical or vector controlling whether to allow ambiguities during pattern matching in
countPattern().
- append (default): Logical indicating whether to append results to an existing file in custom output functions.
Best Practices
- Verify Chromosome Information: Use
seqinfo() and seqnames() to verify chromosome naming conventions and lengths before starting an analysis.
- Manage Memory: Load only one chromosome sequence into memory at a time (e.g.,
subject <- genome[[seqname]]) to avoid memory allocation problems on large genomes.
- Reverse Strand Matching: Find matches on the minus strand by taking the
reverseComplement() of the short query pattern rather than the entire chromosome subject.
Common Pitfalls
- Memory Exhaustion: Loading all chromosome sequences into memory at once. Fix: Iterate through chromosomes using a
for loop and seqnames().
- Inefficient Reverse Complementation: Applying
reverseComplement() to an entire chromosome sequence. Fix: Apply reverseComplement() to the short query pattern instead.
- Masking Confusion: Forgetting that masks might be active, leading to skipped matches or unexpected results. Fix: Explicitly toggle masks using
active(masks(chrY)) <- FALSE.
Alternatives
- Biostrings: For basic sequence manipulation on individual FASTA files without the full genome package infrastructure.
- GenomicFeatures: For extracting transcript/exon sequences rather than raw genomic intervals.
- biomaRt: For querying remote sequence databases without local storage.
Citations
- Pagès, H. (2026). Efficient genome searching with Biostrings and the BSgenome data packages.
References
Run this on BioMate
This skill is the knowledge layer — when, why, and how to use bsgenome. To run this analysis on your own data with managed compute, automated QC, and reproducible outputs, use BioMate — free to start.
▶ Open bsgenome on BioMate →
1---2name: bioconductor-bsgenome3description: Infrastructure shared by all the Biostrings-based genome data packages.4---56# BSgenome78## Dependencies & Environment910> Package-intrinsic requirements from the Bioconductor landing page — reproduce in any R environment.1112- **Version:** 1.80.0 · **Bioconductor:** 3.23 · **R:** ≥ 4.613- **Depends:** BiocGenerics, S4Vectors, IRanges, Seqinfo, GenomicRanges, Biostrings, BiocIO, rtracklayer14- **Imports:** matrixStats, XVector, Rsamtools15- **Install:** `BiocManager::install("BSgenome")`1617## When to Use18- **Chromosome Pattern Matching**: Finding or counting the occurrences of an arbitrary nucleotide pattern in a specific chromosome using `matchPattern()` or `countPattern()`.19- **Genome-Wide Dictionary Searches**: Finding all occurrences of a constant-width dictionary of patterns across an entire genome using `PDict()` and `matchPDict()`.20- **Sequence Masking**: Applying or toggling masks (e.g., assembly gaps, repeats) on chromosome sequences using `masks()` and `active()` before performing sequence analysis.2122## When NOT to Use23- For querying remote sequence databases on-the-fly without local storage, use **biomaRt** instead, as `BSgenome` relies on locally installed data packages.24- For extracting transcript or exon sequences, use **GenomicFeatures** instead, because `BSgenome` provides raw chromosome sequences rather than gene models.2526## Data Requirements27- **Genome Package**: An installed `BSgenome` data package (e.g., `BSgenome.Celegans.UCSC.ce2`).28- **Query Patterns**: A dictionary of patterns stored in a FASTA file and loaded as a `DNAStringSet` using `readDNAStringSet()`.2930## Key Parameters31- **max.mismatch** (default): Allows inexact matching by specifying the maximum number of mismatching letters per match in `matchPattern()`.32- **fixed** (default): Logical or vector controlling whether to allow ambiguities during pattern matching in `countPattern()`.33- **append** (default): Logical indicating whether to append results to an existing file in custom output functions.3435## Best Practices36- **Verify Chromosome Information**: Use `seqinfo()` and `seqnames()` to verify chromosome naming conventions and lengths before starting an analysis.37- **Manage Memory**: Load only one chromosome sequence into memory at a time (e.g., `subject <- genome[[seqname]]`) to avoid memory allocation problems on large genomes.38- **Reverse Strand Matching**: Find matches on the minus strand by taking the `reverseComplement()` of the short query pattern rather than the entire chromosome subject.3940## Common Pitfalls41- **Memory Exhaustion**: Loading all chromosome sequences into memory at once. *Fix*: Iterate through chromosomes using a `for` loop and `seqnames()`.42- **Inefficient Reverse Complementation**: Applying `reverseComplement()` to an entire chromosome sequence. *Fix*: Apply `reverseComplement()` to the short query pattern instead.43- **Masking Confusion**: Forgetting that masks might be active, leading to skipped matches or unexpected results. *Fix*: Explicitly toggle masks using `active(masks(chrY)) <- FALSE`.4445## Alternatives46- **Biostrings**: For basic sequence manipulation on individual FASTA files without the full genome package infrastructure.47- **GenomicFeatures**: For extracting transcript/exon sequences rather than raw genomic intervals.48- **biomaRt**: For querying remote sequence databases without local storage.4950## Citations51- Pagès, H. (2026). Efficient genome searching with Biostrings and the BSgenome data packages.5253## References54- Homepage: https://bioconductor.org/packages/BSgenome55- Vignette: https://bioconductor.org/packages/release/bioc/vignettes/BSgenome/inst/doc/GenomeSearching.pdf5657<!-- biomate-cta -->58---5960## Run this on BioMate6162This skill is the **knowledge layer** — when, why, and how to use `bsgenome`. To **run this analysis on your own data** with managed compute, automated QC, and reproducible outputs, use **[BioMate](https://www.biomate.ai?ref=kb&pkg=bsgenome)** — free to start.6364▶ **[Open `bsgenome` on BioMate →](https://www.biomate.ai?ref=kb&pkg=bsgenome)**