Thanks, Hervé, that's great. Would it make sense to have a sort or sortSeqlevels method for Seqinfo and then a sortSeqlevels,ANY method that just does seqinfo(x) <- sort(seqinfo(x))?
Michael On Tue, Sep 17, 2013 at 12:56 PM, Hervé Pagès <hpa...@fhcrc.org> wrote: > On 09/17/2013 10:58 AM, Hervé Pagès wrote: > >> For sorting the chromosome names in "natural" order, you can use >> the makeSeqnameIds() helper function in GenomicRanges: >> >> seqlevels(gr) <- seqlevels(gr)[makeSeqnameIds(**seqlevels(gr))] >> > > I meant: > > seqlevels(gr) <- seqlevels(gr)[order(**makeSeqnameIds(seqlevels(gr)))**] > > Probably the source of Michael's confusion... sorry. > > sortSeqlevels() just added to GenomicRanges 1.13.44: > > seqlevels <- c("chr2RHet", "chr4", "chrUextra", "chrYHet", > "chrM", "chrXHet", "chr2LHet", "chrU", > "chr3L", "chr3R", "chr2R", "chrX") > > Then: > > > sortSeqlevels(seqlevels) > [1] "chr2R" "chr3L" "chr3R" "chr4" "chrX" "chrU" > [7] "chrM" "chr2LHet" "chr2RHet" "chrXHet" "chrYHet" > "chrUextra" > > > sortSeqlevels(seqlevels, X.is.sexchrom=TRUE) > [1] "chr2R" "chr3L" "chr3R" "chr4" "chrX" "chrU" > [7] "chrM" "chr2LHet" "chr2RHet" "chrXHet" "chrYHet" > "chrUextra" > > H. > > > > >> It recognizes several naming conventions (chr-prefixed or not, >> roman, etc...) e.g.: >> >> > makeSeqnameIds(c("Y", "1", "9", "M", "2")) >> [1] 4 1 3 5 2 >> >> > makeSeqnameIds(c("chrY", "chrI", "chrIX", "chrM", "chrII")) >> [1] 4 1 3 5 2 >> >> I still need to improve the documentation of this function, put >> more examples, and add unit tests. It's used internally by the >> makeTranscriptDb* functions in GenomicFeatures to assign internal >> ids to the chromosomes so that all the TranscriptDb extractors >> can then return GRanges and GRangesList objects with the seqlevels >> in the "natural" order. >> >> Cheers, >> H. >> >> >> On 09/17/2013 10:23 AM, Kasper Daniel Hansen wrote: >> >>> Actually, what I (and I think several others) just want is >>> fixSeqnames() >>> which sorts and fixes them to some convention. I don't really care which >>> one, but I want to do some easy harmonization, preferably in line with >>> other bioc tools. I know this is hard to do for all organisms, but >>> having >>> something that deals with the major ones (human, mouse, fruit fly, yeast, >>> some monkeys) would be extremely valuable. If this function existed, I >>> could just throw all my GRanges at it. >>> >>> Kasper >>> >>> >>> On Tue, Sep 17, 2013 at 1:14 PM, Michael Lawrence >>> <lawrence.mich...@gene.com >>> >>>> wrote: >>>> >>> >>> When I hit this I usually just do: >>>> >>>> seqlevels(gr) <- paste0("chr", c(1:22, "X", "Y")) >>>> >>>> It would be nice if there were a function for sorting chromosome names >>>> according to a specified naming convention. Like sortSeqlevels(gr, >>>> UCSCNaming()) or the alternative replacement syntax: seqinfo(gr) <- >>>> sort(seqinfo(gr), UCSCNaming()). Although sort is only single-dispatch. >>>> >>>> Michael >>>> >>>> >>>> >>>> >>>> >>>> >>>> On Tue, Sep 17, 2013 at 8:59 AM, Vincent Carey >>>> <st...@channing.harvard.edu>**wrote: >>>> >>>> I am replying to this as Michael mentions that this is a powerful >>>>> operation. Here's my >>>>> problem that I believe is related, but I do not see a straightforward >>>>> solution >>>>> >>>>> bhmm19uni >>>>>> >>>>> GRanges with 559456 ranges and 4 metadata columns: >>>>> seqnames ranges strand | name >>>>> score >>>>> <Rle> <IRanges> <Rle> | <character> >>>>> <numeric> >>>>> 1 chr1 [ 67229025, 67341224] * | 13_Heterochrom/lo >>>>> 0 >>>>> 2 chr1 [203057955, 203060154] * | 12_Repressed >>>>> 0 >>>>> 3 chr1 [ 8458427, 8486226] * | 13_Heterochrom/lo >>>>> 0 >>>>> 4 chr1 [ 16904427, 16904826] * | 5_Strong_Enhancer >>>>> 0 >>>>> 5 chr1 [ 25289427, 25293426] * | 11_Weak_Txn >>>>> 0 >>>>> ... ... ... ... ... ... >>>>> ... >>>>> 570766 chr22 [51100931, 51101330] * | 2_Weak_Promoter >>>>> 0 >>>>> 570767 chr22 [51101331, 51101530] * | 6_Weak_Enhancer >>>>> 0 >>>>> 570768 chr22 [51101531, 51101730] * | 2_Weak_Promoter >>>>> 0 >>>>> 570769 chr22 [51101731, 51178130] * | 13_Heterochrom/lo >>>>> 0 >>>>> 570770 chr22 [51178131, 51178330] * | 15_Repetitive/CNV >>>>> 0 >>>>> thick numcode >>>>> <IRanges> <character> >>>>> 1 [ 67001613, 67113812] 13 >>>>> 2 [201324578, 201326777] 12 >>>>> 3 [ 8381014, 8408813] 13 >>>>> 4 [ 16777014, 16777413] 5 >>>>> 5 [ 25162014, 25166013] 11 >>>>> ... ... ... >>>>> 570766 [49447797, 49448196] 2 >>>>> 570767 [49448197, 49448396] 6 >>>>> 570768 [49448397, 49448596] 2 >>>>> 570769 [49448597, 49524996] 13 >>>>> 570770 [49524997, 49525196] 15 >>>>> --- >>>>> seqlengths: >>>>> chr1 chr10 chr11 chr5 ... chr2 chr21 >>>>> chr4 >>>>> 249250621 135534747 135006516 180915260 ... 243199373 48129895 >>>>> 191154276 >>>>> >>>>> If I try to make a karyogram with ggbio, the chromosomes are in an >>>>> unnatural order. What is the right approach to getting the seqinfo >>>>> in a >>>>> natural order with respect to chromosome names and lengths? >>>>> Reassigning >>>>> seqlevels seems dangerous but I haven't experimented fully. It must >>>>> be a >>>>> common use case but I do not see it in doc. >>>>> >>>>> >>>>> >>>>> On Tue, May 21, 2013 at 11:00 AM, Michael Lawrence < >>>>> lawrence.mich...@gene.com> wrote: >>>>> >>>>> On Mon, May 20, 2013 at 10:36 PM, Hervé Pagès <hpa...@fhcrc.org> >>>>>> wrote: >>>>>> >>>>>> Michael, >>>>>>> >>>>>>> >>>>>>> On 05/20/2013 08:44 PM, Michael Lawrence wrote: >>>>>>> >>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On Mon, May 20, 2013 at 4:13 PM, Hervé Pagès <hpa...@fhcrc.org >>>>>>>> <mailto:hpa...@fhcrc.org>> wrote: >>>>>>>> >>>>>>>> Hi, >>>>>>>> >>>>>>>> >>>>>>>> On 05/20/2013 03:15 PM, Michael Lawrence wrote: >>>>>>>> >>>>>>>> On Mon, May 20, 2013 at 3:11 PM, Martin Morgan >>>>>>>> <mtmor...@fhcrc.org <mailto:mtmor...@fhcrc.org>> wrote: >>>>>>>> >>>>>>>> Hi Michael -- >>>>>>>> >>>>>>>> >>>>>>>> On 5/20/2013 5:56 AM, Michael Lawrence wrote: >>>>>>>> >>>>>>>> While it's cool that seqlevels<- has become so >>>>>>>> >>>>>>> flexible, >>>>>> >>>>>>> I still claim >>>>>>>> that >>>>>>>> rename/keep/drop would be a lot easier to read, >>>>>>>> >>>>>>> because >>>> >>>>> they describe the >>>>>>>> high-level operation, and there's no reason to >>>>>>>> >>>>>>> deprecate >>>>>> >>>>>>> them. They're >>>>>>>> also >>>>>>>> easier to remember. For example, for dropping with >>>>>>>> seqlevels<-, the user >>>>>>>> needs >>>>>>>> to remember that "force" is necessary to drop. Much >>>>>>>> easier to just say >>>>>>>> "dropSeqlevels(), please". And reimplementing >>>>>>>> keepSeqlevels is still too >>>>>>>> complicated. Is it such a maintenance burden to >>>>>>>> have >>>>>>>> these simple >>>>>>>> wrappers sit >>>>>>>> on top of the low-level manipulators? >>>>>>>> >>>>>>>> Another suggestion: renameSeqlevels should not >>>>>>>> >>>>>>> require >>>> >>>>> a >>>>>> >>>>>>> named vector (in >>>>>>>> cases >>>>>>>> where it is unnamed, require that it is parallel to >>>>>>>> >>>>>>> the >>>> >>>>> existing >>>>>>>> seqlevels, as >>>>>>>> with seqlevels<-). >>>>>>>> >>>>>>>> >>>>>>>> I didn't really indicate what drove my desire to see >>>>>>>> keepSeqlevels >>>>>>>> deprecated. keepSeqlevels, seqlevels<-, and isActiveSeq >>>>>>>> >>>>>>> were >>>>>> >>>>>>> developed more >>>>>>>> or less independently, and have different contracts. >>>>>>>> The >>>>>>>> different >>>>>>>> contracts are confusing to the user, as is creating a >>>>>>>> >>>>>>> usable >>>>>> >>>>>>> help system >>>>>>>> when there are multiple end points for what is a common >>>>>>>> operation. The help >>>>>>>> pages of each were inadequate in different ways. And >>>>>>>> >>>>>>> because >>>>>> >>>>>>> the code was >>>>>>>> developed independently, support for different objects >>>>>>>> >>>>>>> was >>>> >>>>> inconsistent. So >>>>>>>> actually, yes, the maintenance (and use) burden for the >>>>>>>> previous state of >>>>>>>> affairs was substantial. >>>>>>>> >>>>>>>> On the other hand, I agree that keepSeqlevels is >>>>>>>> >>>>>>> convenient >>>> >>>>> as a simple >>>>>>>> wrapper around seqlevels<-, in the same way that >>>>>>>> setNames >>>>>>>> and names<- are >>>>>>>> both useful. >>>>>>>> >>>>>>>> So we could iterate to >>>>>>>> >>>>>>>> keepSeqlevels <- >>>>>>>> function(x, value, ...) >>>>>>>> { >>>>>>>> seqlevels(x, force=TRUE) <- value >>>>>>>> x >>>>>>>> } >>>>>>>> >>>>>>>> but I'd be less enthusiastic about maintaining the >>>>>>>> >>>>>>> original >>>> >>>>> contract of >>>>>>>> keepSeqlevels, where keepSeqlevels(gr1, gr2), would >>>>>>>> have >>>>>>>> worked for two >>>>>>>> GRanges objects. >>>>>>>> >>>>>>>> >>>>>>>> Why would this be called keepSeqlevels() if, depending on how >>>>>>>> >>>>>>> it's >>>> >>>>> used, >>>>>>>> it will either add, drop, rename, or permute the seqlevels? >>>>>>>> Couldn't this be called setSeqlevels? >>>>>>>> >>>>>>>> >>>>>>>> I thought that new2old was necessary for permuting. >>>>>>>> >>>>>>>> >>>>>>> The seqlevels setter has no 'new2old' arg. >>>>>>> >>>>>>> >>>>>>> You're right that >>>>>>> >>>>>>>> adding should be disallowed for keepSeqlevels(). Adding seqlevels is >>>>>>>> >>>>>>> not >>>>>> >>>>>>> a common operation. The two common operations are: >>>>>>>> * Permuting, usually because the data were imported in non-canonical >>>>>>>> order (seqnameStyle was designed to address this, no?). >>>>>>>> >>>>>>>> >>>>>>> Permuting is straightforward with seqlevels<-: >>>>>>> >>>>>>> > seqlevels(gr) >>>>>>> [1] "chr1" "chr2" "chr3" >>>>>>> >>>>>>> > seqlevels(gr) <- rev(seqlevels(gr)) >>>>>>> >>>>>>> > seqlevels(gr) >>>>>>> [1] "chr3" "chr2" "chr1" >>>>>>> >>>>>>> >>>>>>> * Subsetting, either by keeping or dropping. >>>>>>> >>>>>>>> >>>>>>>> >>>>>>> Also straightforward: >>>>>>> >>>>>>> > seqlevels(gr, force=TRUE) <- "chr2" >>>>>>> >>>>>>> > seqlevels(gr) >>>>>>> [1] "chr2" >>>>>>> >>>>>>> >>>>>>> Two main reasons: taking a >>>>>>> >>>>>>>> small slice of the data for prototyping, or removing problematic >>>>>>>> chromosomes (sex, circular). This goes back to bsapply and the >>>>>>>> >>>>>>> exclude >>>> >>>>> argument. >>>>>>>> >>>>>>>> >>>>>>> There are other important use cases: >>>>>>> >>>>>>> - Dropping seqlevels that are *not* in use. This happens for >>>>>>> example >>>>>>> when subsetting a BAM file with Rsamtools::filterBam to keep >>>>>>> only >>>>>>> the alignments located on a given chromosome. The entire >>>>>>> sequence >>>>>>> dictionary (in the header) is propagated to the resulting BAM >>>>>>> file >>>>>>> so when you read the file with readGAlignments() you end up >>>>>>> with a >>>>>>> bunch of useless seqlevels that you generally start by dropping. >>>>>>> You don't want to drop any alignment so force=FALSE is your >>>>>>> >>>>>> friend. >>>> >>>>> >>>>>>> >>>>>>> This is sort of tangential to the discussion, but do you really >>>>>> want to >>>>>> >>>>> do >>>> >>>>> this? I would preserve the universe as given by the BAM. >>>>>> >>>>>> >>>>>> - An even more common operation is renaming: 90% of the times >>>>>>> that's >>>>>>> what I use seqlevels<- for, and that's what I tell people to use >>>>>>> when they need to rename their chromosomes. Also >>>>>>> straightforward: >>>>>>> >>>>>>> > seqlevels(gr) >>>>>>> [1] "chr1" "chr2" "chr3" "chrM" >>>>>>> >>>>>>> > seqlevels(gr) <- sub("^chr", "", seqlevels(gr)) >>>>>>> > seqlevels(gr) >>>>>>> [1] "1" "2" "3" "M" >>>>>>> >>>>>>> > seqlevels(gr)[seqlevels(gr) == "M"] <- "MT" >>>>>>> > seqlevels(gr) >>>>>>> [1] "1" "2" "3" "MT" >>>>>>> >>>>>>> Note that this is simpler to use than renameSeqlevels() which >>>>>>> always required you to build the entire right value as a named >>>>>>> vector. >>>>>>> >>>>>>> >>>>>>> Sure, renaming is a common use case. Not sure how I forgot that. >>>>>> >>>>>> As I wrote earlier in the thread, renameSeqlevels should be changed so >>>>>> >>>>> as >>>> >>>>> not to require naming of the vector. >>>>>> >>>>>> >>>>>> So the added-value of keepSeqlevels() seems to boil down to: >>>>>>> >>>>>>> (a) it always uses force=TRUE >>>>>>> >>>>>>> (b) it preserves the original object and returns the modified >>>>>>> object >>>>>>> >>>>>>> If you want to restrict the use of keepSeqlevels() to permuting and >>>>>>> dropping, you'll also have to disallow renaming (in addition to >>>>>>> >>>>>> adding). >>>> >>>>> Then its name will more or less reflect what it does (if "keep" means >>>>>>> "permute" or "drop"). The final result will be something that does >>>>>>> >>>>>> less >>>> >>>>> than setSeqlevels() and that is not necessarily easier to read: both >>>>>>> will set on the object whatever vector of seqlevels they are >>>>>>> supplied, >>>>>>> except that one will fail when doing so would actually result in >>>>>>> >>>>>> adding >>>> >>>>> or renaming seqlevels. >>>>>>> >>>>>>> >>>>>>> So it looks like seqlevels<- is pretty powerful. Now I see that if I >>>>>> scroll >>>>>> down to the examples in the man page, I find the actual documentation. >>>>>> It's >>>>>> cool to learn that we can replace seqlevels on TxDb objects. My >>>>>> argument >>>>>> has always been that since these low-level operations are so powerful, >>>>>> it's >>>>>> nice to have high-level operations to clarify the code. We have to >>>>>> think >>>>>> hard to know what the RHS will do in that replacement. It's >>>>>> probably one >>>>>> of >>>>>> the most complex replacement operations; far more complex than the >>>>>> >>>>> typical >>>> >>>>> one, including levels<- on factor. There's nothing wrong with that; >>>>>> it's >>>>>> just complexity that we should be able to hide. >>>>>> >>>>>> Michael >>>>>> >>>>>> H. >>>>>> >>>>>>> >>>>>>> >>>>>>> Michael >>>>>>>> >>>>>>>> >>>>>>>> H. >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> Well, I wasn't even aware of that feature, so you've made >>>>>>>> >>>>>>> your >>>> >>>>> point about >>>>>>>> the documentation ;) Sounds like a good compromise to me. >>>>>>>> >>>>>>>> Thanks for understanding, >>>>>>>> Michael >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> Martin >>>>>>>> >>>>>>>> >>>>>>>> Michael >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On Sat, May 18, 2013 at 6:00 PM, Martin Morgan >>>>>>>> <mtmor...@fhcrc.org <mailto:mtmor...@fhcrc.org> >>>>>>>> <mailto:mtmor...@fhcrc.org <mailto: >>>>>>>> >>>>>>> mtmor...@fhcrc.org >>>> >>>>> >>>>>>>>> >>>>>>>> wrote: >>>>>>>> >>>>>>>> On 05/18/2013 05:42 PM, Martin Morgan wrote: >>>>>>>> >>>>>>>> Some of the most common operations are >>>>>>>> straight-forward, e.g., >>>>>>>> >>>>>>>> > gr = GRanges(paste0("chr", >>>>>>>> c(1:22, >>>>>>>> "X", "Y")), IRanges(1, >>>>>>>> 100)) >>>>>>>> > seqlevels(gr) = sub("chr", "ch", >>>>>>>> seqlevels(gr)) >>>>>>>> >>>>>>>> >>>>>>>> To get a more comprehensive example I should >>>>>>>> >>>>>>> have >>>> >>>>> followed my own >>>>>>>> advice and >>>>>>>> grabbed from the help page! >>>>>>>> >>>>>>>> ## Rename: >>>>>>>> seqlevels(txdb) <- sub("chr", "", >>>>>>>> seqlevels(txdb)) >>>>>>>> seqlevels(txdb) >>>>>>>> >>>>>>>> seqlevels(txdb) <- paste0("CH", >>>>>>>> seqlevels(txdb)) >>>>>>>> seqlevels(txdb) >>>>>>>> >>>>>>>> seqlevels(txdb)[seqlevels(__**** >>>>>>>> **__txdb) >>>>>>>> >>>>>>> == >>>> >>>>> >>>>>> >>>>>>>> "CHM"] <- "M" >>>>>>>> >>>>>>>> >>>>>>>> seqlevels(txdb) >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Computational Biology / Fred Hutchinson >>>>>>>> Cancer >>>>>>>> Research Center >>>>>>>> 1100 Fairview Ave. N. >>>>>>>> PO Box 19024 Seattle, WA 98109 >>>>>>>> >>>>>>>> Location: Arnold Building M1 B861 >>>>>>>> Phone: (206) 667-2793 >>>>>>>> >>>>>>> <tel:%28206%29%20667-2793> >>>> >>>>> <tel:%28206%29%20667-2793> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Dr. Martin Morgan, PhD >>>>>>>> >>>>>>>> Fred Hutchinson Cancer Research Center >>>>>>>> 1100 Fairview Ave. N. >>>>>>>> PO Box 19024 Seattle, WA 98109 >>>>>>>> >>>>>>>> >>>>>>>> [[alternative HTML version deleted]] >>>>>>>> >>>>>>>> ______________________________****___________________ >>>>>>>> Bioc-devel@r-project.org >>>>>>>> <mailto:Bioc-devel@r-project.****org< >>>>>>>> >>>>>>> Bioc-devel@r-project.org> >>>>>> >>>>>>> >>>>>>>>> mailing list >>>>>>>> >>>>>>>> https://stat.ethz.ch/mailman/_****_listinfo/bioc-devel<https://stat.ethz.ch/mailman/_**_listinfo/bioc-devel> >>>>>>>> < >>>>>>>> >>>>>>> https://stat.ethz.ch/mailman/_**_listinfo/bioc-devel<https://stat.ethz.ch/mailman/__listinfo/bioc-devel> >>>>>> > >>>>>> >>>>>>> >>>>>>>> >>>>>>>> <https://stat.ethz.ch/mailman/****listinfo/bioc-devel<https://stat.ethz.ch/mailman/**listinfo/bioc-devel> >>>>>>>> < >>>>>>>> >>>>>>> https://stat.ethz.ch/mailman/**listinfo/bioc-devel<https://stat.ethz.ch/mailman/listinfo/bioc-devel> >>>>>> > >>>>>> >>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Hervé Pagès >>>>>>>> >>>>>>>> Program in Computational Biology >>>>>>>> Division of Public Health Sciences >>>>>>>> >>>>>>>> Fred Hutchinson Cancer Research Center >>>>>>>> 1100 Fairview Ave. N, M1-B514 >>>>>>>> P.O. Box 19024 >>>>>>>> Seattle, WA 98109-1024 >>>>>>>> >>>>>>>> E-mail: hpa...@fhcrc.org <mailto:hpa...@fhcrc.org> >>>>>>>> Phone: (206) 667-5791 <tel:%28206%29%20667-5791> >>>>>>>> Fax: (206) 667-1319 <tel:%28206%29%20667-1319> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>> Hervé Pagès >>>>>>> >>>>>>> Program in Computational Biology >>>>>>> Division of Public Health Sciences >>>>>>> Fred Hutchinson Cancer Research Center >>>>>>> 1100 Fairview Ave. N, M1-B514 >>>>>>> P.O. Box 19024 >>>>>>> Seattle, WA 98109-1024 >>>>>>> >>>>>>> E-mail: hpa...@fhcrc.org >>>>>>> Phone: (206) 667-5791 >>>>>>> Fax: (206) 667-1319 >>>>>>> >>>>>>> >>>>>> [[alternative HTML version deleted]] >>>>>> >>>>>> >>>>>> ______________________________**_________________ >>>>>> Bioc-devel@r-project.org mailing list >>>>>> https://stat.ethz.ch/mailman/**listinfo/bioc-devel<https://stat.ethz.ch/mailman/listinfo/bioc-devel> >>>>>> >>>>>> >>>>>> >>>>> >>>> [[alternative HTML version deleted]] >>>> >>>> >>>> ______________________________**_________________ >>>> Bioc-devel@r-project.org mailing list >>>> https://stat.ethz.ch/mailman/**listinfo/bioc-devel<https://stat.ethz.ch/mailman/listinfo/bioc-devel> >>>> >>>> >>>> >>> [[alternative HTML version deleted]] >>> >>> >>> >>> ______________________________**_________________ >>> Bioc-devel@r-project.org mailing list >>> https://stat.ethz.ch/mailman/**listinfo/bioc-devel<https://stat.ethz.ch/mailman/listinfo/bioc-devel> >>> >>> >> > -- > Hervé Pagès > > Program in Computational Biology > Division of Public Health Sciences > Fred Hutchinson Cancer Research Center > 1100 Fairview Ave. N, M1-B514 > P.O. Box 19024 > Seattle, WA 98109-1024 > > E-mail: hpa...@fhcrc.org > Phone: (206) 667-5791 > Fax: (206) 667-1319 > [[alternative HTML version deleted]]
_______________________________________________ Bioc-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/bioc-devel