Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .Rbuildignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
^LICENSE\.md$
^README\.Rmd$
^_pkgdown\.yml$
^docs$
^pkgdown$
^\.github$
^doc$
^Meta$
(^|/)\._
(^|/)\.DS_Store$
^\.Rhistory$
^\.RData$
^\.Ruserdata$
^\.Rproj\.user$
^\.github
2 changes: 1 addition & 1 deletion .github/.gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
*.html
/icbb/projects/igunduz/methylTFR/.github/workflows/check-bioc.yml
/icbb/projects/igunduz/methylTFRAnnotationHg38/.github/workflows/check-bioc.yml
2 changes: 1 addition & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Authors@R: person(
comment = c(ORCID = "0000-0003-2641-0916"))
License: Artistic-2.0
Encoding: UTF-8
Version: 0.99.2
Version: 0.99.6
Depends: R (>= 4.3.0)
Imports: AnnotationHub, GenomicRanges, utils
Suggests: knitr, rmarkdown, testthat (>= 3.0.0), BiocStyle
Expand Down
8 changes: 6 additions & 2 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# methylTFRAnnotationHg38 0.99.0
# methylTFRAnnotationHg38 0.99.6

* Initial submission to Bioconductor.

Expand All @@ -12,4 +12,8 @@
* The genome-wide GC table uses non-overlapping 30 nt windows binned
into five genome-wide GC quintiles. Bin boundaries are recorded with
the object so that the motif frequency tables and the genome table
are always binned on the same scale.
are always binned on the same scale.

* Fixes on NOTES from biocchecks

* Added 4 spaces as suggested
8 changes: 4 additions & 4 deletions R/aaa-utils.R
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#' @noRd
.local_dir <- function() { ... }
.PKG_NAME <- "methylTFRAnnotationHg38"
.MOTIF_SETS <- c("altius", "cisbpv2", "jaspar2020", "jaspar2020_distal")
.ASSEMBLY <- "hg38"
Expand Down Expand Up @@ -51,8 +49,10 @@
.check_motif_set <- function(motifSet) {
motifSet <- tolower(motifSet)
if (length(motifSet) != 1 || !motifSet %in% .MOTIF_SETS) {
stop("Invalid motif set. Available: ",
paste(.MOTIF_SETS, collapse = ", "))
stop(
"Invalid motif set. Available: ",
paste(.MOTIF_SETS, collapse = ", ")
)
}
motifSet
}
20 changes: 11 additions & 9 deletions R/getGCfreq.R
Original file line number Diff line number Diff line change
@@ -1,30 +1,32 @@
#' @title getGCfreq
#' @description Load the motif GC frequency table for a motif set. Downloaded from AnnotationHub on first use and cached locally thereafter.
#' @param motifSet Motif set to load. One of: altius, cisbpv2, jaspar2020, jaspar2020_distal.
#' @description Load the motif GC frequency table for a motif set.
#' Downloaded from AnnotationHub on first use and cached locally thereafter.
#' @param motifSet Motif set to load. One of: altius, cisbpv2, jaspar2020,
#' jaspar2020_distal.
#' @return A named \code{list} of five-row matrices, one per motif.
#' @examples
#' # 1. Create a dummy object and save it to a temporary directory
#' # 1. Create a dummy object and save it to a temporary directory
#' # to bypass AnnotationHub during package checks.
#' mock_dir <- tempdir()
#' mock_file <- file.path(mock_dir, "altius_motif_gcfreq.rds")
#'
#'
#' # (Mocking a 5-row matrix as expected by the function output)
#' mock_data <- list(mock_motif_1 = matrix(0.25, nrow = 5, ncol = 4))
#' saveRDS(mock_data, mock_file)
#'
#'
#' # 2. Temporarily point the package's local directory to tempdir()
#' old_opt <- getOption("methylTFRAnnotationHg38.datadir")
#' options(methylTFRAnnotationHg38.datadir = mock_dir)
#'
#'
#' # 3. Run the function (it will now read the mock file)
#' x <- getGCfreq(motifSet = "altius")
#'
#'
#' # 4. Restore options and clean up the temporary file
#' options(methylTFRAnnotationHg38.datadir = old_opt)
#' file.remove(mock_file)
#'
#'
#' @export
getGCfreq <- function(motifSet = "altius") {
motifSet <- .check_motif_set(motifSet)
.resolve_resource(paste0(motifSet, "_motif_gcfreq.rds"))
}
}
12 changes: 6 additions & 6 deletions R/getGenomeGC.R
Original file line number Diff line number Diff line change
Expand Up @@ -11,26 +11,26 @@
#' # 1. Create a dummy object and save it to a temp directory
#' mock_dir <- tempdir()
#' mock_file <- file.path(mock_dir, "genomewide_GC_hg38.rds")
#'
#'
#' # Mocking a GRanges object with the expected metadata columns
#' mock_gr <- GenomicRanges::GRanges("chr1:1-100")
#' mock_gr$GC_bias <- 0.5
#' mock_gr$GC_bin <- 1L
#' saveRDS(mock_gr, mock_file)
#'
#'
#' # 2. Point the local directory option to the temp directory
#' old_opt <- getOption("methylTFRAnnotationHg38.datadir")
#' options(methylTFRAnnotationHg38.datadir = mock_dir)
#'
#'
#' # 3. Run the function
#' gc <- getGenomeGC()
#'
#'
#' # 4. Restore options and clean up
#' options(methylTFRAnnotationHg38.datadir = old_opt)
#' file.remove(mock_file)
#'
#'
#' @export
getGenomeGC <- function(assembly = .ASSEMBLY) {
assembly <- tolower(assembly)
.resolve_resource(paste0("genomewide_GC_", assembly, ".rds"))
}
}
18 changes: 10 additions & 8 deletions R/getTFbindsites.R
Original file line number Diff line number Diff line change
@@ -1,32 +1,34 @@
#' @title getTFbindsites
#' @description Retrieve transcription factor binding sites for a motif set. Downloaded from AnnotationHub on first use and cached locally thereafter.
#' @param motifSet Motif set to load. One of: altius, cisbpv2, jaspar2020, jaspar2020_distal.
#' @description Retrieve transcription factor binding sites for a motif set.
#' Downloaded from AnnotationHub on first use and cached locally thereafter.
#' @param motifSet Motif set to load. One of: altius, cisbpv2, jaspar2020,
#' jaspar2020_distal.
#' @return A \code{GRangesList}, one element per motif.
#' @import GenomicRanges
#' @examples
#' # 1. Create a dummy object and save it to a temp directory
#' mock_dir <- tempdir()
#' mock_file <- file.path(mock_dir, "altius_tf_bindsites.rds")
#'
#'
#' # Mocking a GRangesList as expected by the function output
#' mock_grl <- GenomicRanges::GRangesList(
#' mock_motif_1 = GenomicRanges::GRanges("chr1:100-200")
#' )
#' saveRDS(mock_grl, mock_file)
#'
#'
#' # 2. Point the local directory option to the temp directory
#' old_opt <- getOption("methylTFRAnnotationHg38.datadir")
#' options(methylTFRAnnotationHg38.datadir = mock_dir)
#'
#'
#' # 3. Run the function
#' x <- getTFbindsites()
#'
#'
#' # 4. Restore options and clean up
#' options(methylTFRAnnotationHg38.datadir = old_opt)
#' file.remove(mock_file)
#'
#'
#' @export
getTFbindsites <- function(motifSet = "altius") {
motifSet <- .check_motif_set(motifSet)
.resolve_resource(paste0(motifSet, "_tf_bindsites.rds"))
}
}
8 changes: 5 additions & 3 deletions man/getGCfreq.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 4 additions & 2 deletions man/getTFbindsites.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion tests/testthat/test-accessors.R
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ test_that("metadata.csv covers every declared motif set", {
md <- utils::read.csv(system.file("extdata", "metadata.csv", package = "methylTFRAnnotationHg38"))
for (s in methylTFRAnnotationHg38:::.MOTIF_SETS) {
expect_true(any(grepl(paste0("^", s, "_"), md$Title)),
info = s)
info = s
)
}
})
25 changes: 14 additions & 11 deletions vignettes/methylTFRAnnotationHg38.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ vignette: >
%\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
```{r setup, include = FALSE}
knitr::opts_chunk$set(collapse = TRUE, comment = "#>")
```

Expand All @@ -17,11 +17,11 @@ knitr::opts_chunk$set(collapse = TRUE, comment = "#>")
compute bias-corrected transcription factor deviation scores on hg38:

- **binding sites**, one `GRanges` per motif, each range extended
so that methylation can be read across the footprint window;
so that methylation can be read across the footprint window;
- **motif GC frequency tables**, recording how each motif's binding
sites distribute across genome-wide GC quintiles;
sites distribute across genome-wide GC quintiles;
- **the genome-wide GC distribution**, which assigns each
methylation call to a GC bin.
methylation call to a GC bin.

The GC tables are what make the deviation score bias-corrected. A
motif whose binding sites sit in GC-rich sequence will overlap CpG
Expand Down Expand Up @@ -60,31 +60,34 @@ options(methylTFRAnnotationHg38.datadir = mock_dir)

# Usage

```{r}
```{r usage}
library(methylTFRAnnotationHg38)

tf_bindsites <- getTFbindsites("altius")
gcfreqs <- getGCfreq("altius")
gc_dist <- getGenomeGC()
gcfreqs <- getGCfreq("altius")
gc_dist <- getGenomeGC()
```

These are passed straight to `methylTFR::run_methyltfr()`.

# Available motif sets

```{r, eval = FALSE}
```{r available_motifs, eval = FALSE}
methylTFRAnnotationHg38:::.MOTIF_SETS
```

Sets ending in `_distal` provide GC frequency tables computed over distal regulatory regions only. They share the unrestricted binding sites, so pass the base set name to `getTFbindsites()` and the `_distal` name to `getGCfreq()`.
Sets ending in `_distal` provide GC frequency tables computed
over distal regulatory regions only. They share the unrestricted
binding sites, so pass the base set name to `getTFbindsites()`
and the `_distal` name to `getGCfreq()`.

# Session info

```{r}
```{r session_info}
sessionInfo()
```

```{r cleanup, include = FALSE}
# HIDDEN CHUNK: Clean up the options
options(methylTFRAnnotationHg38.datadir = old_opt)
```
```