diff --git a/DESCRIPTION b/DESCRIPTION index c84f83a..1b49250 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -52,6 +52,7 @@ Suggests: impute, knitr, magrittr, + miRNAmeConverter, org.Hs.eg.db, RColorBrewer, readr, diff --git a/NAMESPACE b/NAMESPACE index ceb863d..34625fb 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -34,6 +34,7 @@ export(trimColData) export(uniformBuilds) import(methods) importFrom(BiocBaseUtils,checkInstalled) +importFrom(BiocBaseUtils,isCharacter) importFrom(BiocBaseUtils,isScalarCharacter) importFrom(BiocBaseUtils,isScalarNumber) importFrom(BiocBaseUtils,lifeCycle) diff --git a/R/simplifyTCGA.R b/R/simplifyTCGA.R index 7b1ee17..b709052 100644 --- a/R/simplifyTCGA.R +++ b/R/simplifyTCGA.R @@ -1,7 +1,7 @@ #' @importFrom GenomicFeatures genes #' @importFrom GenomeInfoDb keepStandardChromosomes seqlevelsStyle #' seqlevelsStyle<- -#' @importFrom BiocBaseUtils isScalarCharacter +#' @importFrom BiocBaseUtils isScalarCharacter isCharacter NULL .checkHas <- @@ -30,9 +30,15 @@ NULL .convertTo <- function(x, which, FUN, keep, unmap) { for (i in which(which)) { - lookup <- FUN(rownames(x[[i]])) + assay <- x[[i]] + lookup <- FUN(rownames(assay)) ranges <- lookup[["mapped"]] - rse <- x[[i]][names(ranges), ] + rowidx <- mcols(ranges)[["rowIdx"]] + rowidx <- Filter(Negate(is.na), rowidx) + if (!is.null(rowidx) && length(rowidx)) + rse <- `rownames<-`(assay[rowidx, ], names(ranges)) + else + rse <- assay[names(ranges), ] # rowData not merged with mcols of RHS in `rowRanges<-` method mcols(ranges) <- S4Vectors::DataFrame(rowData(rse), S4Vectors::mcols(ranges)) @@ -40,7 +46,7 @@ NULL x <- c(x, setNames(S4Vectors::List(rse), paste0(names(x)[i], "_ranged"))) if (length(lookup[["unmapped"]]) && unmap) { - se <- x[[i]][lookup[["unmapped"]], ] + se <- assay[lookup[["unmapped"]], ] x <- c(x, setNames(S4Vectors::List(se), paste0(names(x)[i], "_unranged"))) } @@ -67,6 +73,25 @@ NULL res } +#' @name hidden-helpers +#' @keywords internal +.makeMiRNAListRanges <- function(x, gn) { + checkInstalled("miRNAmeConverter") + nc <- miRNAmeConverter::MiRNANameConverter() + mirna_version <- + miRNAmeConverter::assessVersion(nc, names(gn))[1L, "version"] + trout <- miRNAmeConverter::translateMiRNAName( + nc, x, versions = mirna_version + ) + new_x <- trout[[paste0("v", mirna_version, ".0")]] + res <- list(unmapped = setdiff(x, trout[["input"]])) + rowIdx <- match(tolower(trout[["input"]]), tolower(x)) + gn <- gn[match(new_x, names(gn))] + mcols(gn)[["rowIdx"]] <- rowIdx + res[["mapped"]] <- gn + res +} + .getGN <- function(gen) { stopifnot(isScalarCharacter(gen)) @@ -92,9 +117,9 @@ NULL #' @rdname hidden-helpers #' @keywords internal .getRangesOfMir <- function(x) { - stopifnot(isScalarCharacter(x)) + stopifnot(isCharacter(x)) - mirnas_gr <- .get_hsa_gff3(x) + mirnas_gr <- .get_hsa_gff3("hg19") miR <- mirnas_gr[ mcols(mirnas_gr)[["type"]] %in% c("miRNA", "microRNA", "tRNA") @@ -103,7 +128,7 @@ NULL seqlevelsStyle(miR) <- "NCBI" names(miR) <- mcols(miR)[["Name"]] - .makeListRanges(x, miR) + .makeMiRNAListRanges(x, miR) } #' @rdname hidden-helpers @@ -209,9 +234,7 @@ NULL #' [`RangedSummarizedExperiment`][SummarizedExperiment::RangedSummarizedExperiment-class] #' objects #' -#' @author L. Waldron -#' -#' @md +#' @author L. Waldron, M. Ramos #' #' @examples #' @@ -275,10 +298,16 @@ symbolsToRanges <- function(obj, keep.assay = FALSE, unmapped = TRUE) { #' #' @export mirToRanges <- function(obj, keep.assay = FALSE, unmapped = TRUE) { - lifeCycle( - package = "TCGAutils", - cycle = "defunct", - title = "simplifyTCGA" + checkInstalled("Bioc.gff") + + can.fix <- .isFixable(mae = obj, pattern = "^hsa") + + .convertTo( + x = obj, + which = can.fix, + FUN = .getRangesOfMir, + keep = keep.assay, + unmap = unmapped ) } diff --git a/R/utils.R b/R/utils.R index 67ac7af..c02b035 100644 --- a/R/utils.R +++ b/R/utils.R @@ -45,7 +45,7 @@ gff_lines <- readLines(file, n = 50) genome_line <- grepv("genome-build-id", gff_lines) gnm <- strsplit(genome_line, ":\\s+")[[1L]] |> - tail(n = 1L) |> + utils::tail(n = 1L) |> trimws() if (!length(gnm)) NA_character_ diff --git a/man/hidden-helpers.Rd b/man/hidden-helpers.Rd index 9ac732b..e6525bf 100644 --- a/man/hidden-helpers.Rd +++ b/man/hidden-helpers.Rd @@ -3,6 +3,7 @@ \name{hidden-helpers} \alias{hidden-helpers} \alias{.makeListRanges} +\alias{.makeMiRNAListRanges} \alias{.getRangesOfMir} \alias{.getRangesOfSYMBOLS} \alias{.getRangesOfCpG} @@ -10,6 +11,8 @@ \usage{ .makeListRanges(x, gn) +.makeMiRNAListRanges(x, gn) + .getRangesOfMir(x) .getRangesOfSYMBOLS(x) diff --git a/man/simplifyTCGA.Rd b/man/simplifyTCGA.Rd index 04191e8..163c1bc 100644 --- a/man/simplifyTCGA.Rd +++ b/man/simplifyTCGA.Rd @@ -117,5 +117,5 @@ simplifyTCGA(accmae) } \author{ -L. Waldron +L. Waldron, M. Ramos }