Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Could `GenomicRanges::binnedAverage()` be reused for other purposes?

Aperta
#77 4 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
35/100
Tipo di issue
Funzionalità
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
r

Direzione di ricerca

Inizia leggendo GenomicRanges::binnedAverage() e le funzioni IRanges::view*() che utilizza, quindi confronta l’interfaccia proposta di binnedView() e la gestione di na.rm e delle larghezze troncate. Il lavoro è concluso quando sarà disponibile una generalizzazione esaminata che supporti aggregatori come viewMeans e viewSums, preservando il comportamento esistente di binnedAverage().

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Hi Herve,
this is more of a suggestion rather than a bug.
Would it make sense to make the binnedAverage() function more general, in a way that it could compute more than just the mean? If I understand the code, it's relatively straightforward to call any function in IRanges::view*().
Something like this (please notice the new parameter at the end of the header. Defaults to IRanges::viewMeans to mimic the behavior of binnedAveage()):

binnedView <- function(bins, numvar, varname, na.rm=FALSE, fun=IRanges::viewMeans) {
    if (!is(bins, "GRanges")) 
        stop("'x' must be a GRanges object")
    if (!is(numvar, "RleList")) 
        stop("'numvar' must be an RleList object")
    if (!identical(seqlevels(bins), names(numvar))) 
        stop("'seqlevels(bin)' and 'names(numvar)' must be identical")
    fun2 <- function(v, na.rm = FALSE) {
        if (!isTRUEorFALSE(na.rm)) 
            stop("'na.rm' must be TRUE or FALSE")
        result <- fun(v, na.rm = na.rm)
        w0 <- width(v)
        v1 <- trim(v)
        w1 <- width(v1)
        if (na.rm) {
            na_count <- sum(is.na(v1))
            w0 <- w0 - na_count
            w1 <- w1 - na_count
        }
        result <- result * w1/w0
        result[w0 != 0L & w1 == 0L] <- 0
        result
    }
    bins_per_chrom <- split(ranges(bins), seqnames(bins))
    result_list <- lapply(names(numvar), function(seqname) {
        v <- Views(numvar[[seqname]], bins_per_chrom[[seqname]])
        fun2(v, na.rm = na.rm)
    })
    new_mcol <- unsplit(result_list, as.factor(seqnames(bins)))
    mcols(bins)[[varname]] <- new_mcol
    bins
}

This would enable other ways of aggregating signal in bins (eg. by setting fun=IRanges::viewSums).

cheers,
Sergi

Lingua principale
R
Stelle
47
Fork
22
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di Bioconductor/GenomicRanges

Tutte le issue di Bioconductor/GenomicRanges

Issue simili

Altre issue su R

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.