Could `GenomicRanges::binnedAverage()` be reused for other purposes?
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
- Ambito
- bioinformatics
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
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di Bioconductor/GenomicRanges
-
compatibleStrand has contradictory definitions (plain function and S4 generic)Forse già presa @MichaelChirico l’ha presa 4 giorni fa. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
Bioconductor/GenomicRanges#101 ·
-
MemoryAperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 30/100
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 38/100
Bioconductor/GenomicRanges#95 · 2 commenti ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 42/100
Bioconductor/GenomicRanges#94 · 2 commenti ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 35/100
Tutte le issue di Bioconductor/GenomicRanges
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
Bioconductor/BiocCheck#264 ·
-
Length 1 columns are written as scalarsForse già presa @lazappi l’ha presa oggi. Apertabug triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
easystats/parameters#1290 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
corybrunson/ordr#91 ·