Re: [Bioc-devel] best practice: verbose messages

2013-07-14 Thread Martin Morgan

On 07/10/2013 10:50 AM, Kasper Daniel Hansen wrote:

On Wed, Jul 10, 2013 at 12:38 PM, Dan Tenenbaum  wrote:


On Wed, Jul 10, 2013 at 9:17 AM, Michael Lawrence
 wrote:

If it's an informational message, like one you might log, use message().

If

you're rendering an object as text, like in a show method, use cat().



Another thing to consider is that messages can be suppressed with
suppressMessages() but cat() output cannot.



Sure.  What I cannot decide is whether that is good or bad.


Returning to this part of the thread, and mostly just 'for the record', it turns 
out that


  http://bioconductor.org/developers/package-guidelines/#messages

says

End-User Messages

* `message()` communicates diagnostic messages (e.g., progress during lengthy
  computations) during code evaluation.
* `warning()` communicates unusual situations handled by your code.
* `stop()` indicates an error condition.
* `cat()` or `print()` are used only when displaying an object to the user,
  e.g., in a `show` method.

Martin



Kasper






Dan



Just my opinion,
Michael


On Wed, Jul 10, 2013 at 8:24 AM, Kasper Daniel Hansen <
kasperdanielhan...@gmail.com> wrote:


Should I use cat() or message() (or something else) for
   if(verbose) cat("my message\n")

Best,
Kasper

 [[alternative HTML version deleted]]

___
Bioc-devel@r-project.org mailing list
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




[[alternative HTML version deleted]]

___
Bioc-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel




--
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

___
Bioc-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel


Re: [Bioc-devel] best practice: verbose messages

2013-07-11 Thread Sean Davis
On Thu, Jul 11, 2013 at 11:01 AM, Kasper Daniel Hansen
 wrote:
> On Thu, Jul 11, 2013 at 9:57 AM, Henrik Bengtsson 
> wrote:
>
>> On Wed, Jul 10, 2013 at 9:10 PM, Hervé Pagès  wrote:
>> > Hi Kasper,
>> >
>> >
>> > On 07/10/2013 10:50 AM, Kasper Daniel Hansen wrote:
>> >>
>> >> On Wed, Jul 10, 2013 at 12:38 PM, Dan Tenenbaum 
>> >> wrote:
>> >>
>> >>> On Wed, Jul 10, 2013 at 9:17 AM, Michael Lawrence
>> >>>  wrote:
>> 
>>  If it's an informational message, like one you might log, use
>> message().
>> >>>
>> >>> If
>> 
>>  you're rendering an object as text, like in a show method, use cat().
>> 
>> >>>
>> >>> Another thing to consider is that messages can be suppressed with
>> >>> suppressMessages() but cat() output cannot.
>> >>
>> >>
>> >>
>> >> Sure.  What I cannot decide is whether that is good or bad.
>> >
>> >
>> > If you use message(), then you don't need to have a 'verbose' arg since
>> > the messages can be suppressed with suppressMessages(). That makes
>> > your code simpler/cleaner. However this approach is only appropriate if
>> > you want your function to be verbose by default. If you want it to be
>> > quiet by default then I don't know what's best. 'verbose' arg + cat() or
>> > 'verbose' arg + message() ? That's the question...
>>
>> You can also imagine different amounts of verbose, so not always TRUE or
>> FALSE.
>>
>> About Kasper's original question, I'd also say use message().  I've
>> recently done this transition in several of my packages (mostly via
>> the Verbose class in R.utils).  I've thought about this for a long
>> time, but what made me do the transition is the fact that many of the
>> literate programming tools in R echoes the standard output in code
>> chunks, but not the standard errors.  I don't want my verbose/log
>> messages to be displayed in reports/vignettes (by default)
>>
>
> Henrik (and others),
>
> thanks for your contribution to this, I know you have spent a lot of time
> thinking about things like this.
>
> I think it would be nice to try to be somewhat uniform between packages on
> this issue, as it is always nice for users to not have every package be
> slightly different.
>
> I use verbose messages to inform the user that something is happening, and
> for my own (and the user) debugging / analysis optimization. These days I
> tend to have most of my slow code running in parallel using mclapply, I
> could not (easily) figure out how to have a progress report.  I tend to do
> the following
>   verbose supports more than one level, but the standard level is 1
> equivalent to verbose=TRUE.  Higher levels is really only for extensive
> debugging.
>   default is always FALSE
>   I have started to include "[function name]" in each message, like
> "[bumphunterEngine] message", which I find very useful
>   many verbose messages include some timing, like "... done in X secs"
> which I find very useful for development.

Hi, Kasper.

It sounds like you are describing a logging framework.  I haven't
tried any of these, but they might be worth a look.

http://cran.r-project.org/web/packages/logging/
http://cran.r-project.org/web/packages/futile.logger/
http://cran.r-project.org/web/packages/log4r/

Sean


>   A given function tend to only have one verbose level, but I then use the
> following paradigm
>  ... inside some function ...
>  subverbose = max(as.integer(verbose) - 1L, 0L)
>  helpfunction( ..., verbose = subverbose)
>   ie. higher levels of verbose just propogates verbose to sub functions.
>   many functions do not have verbose, only stuff that can take a long time
>   I only use verbose around the parts of a function that really take a long
> time, ie. it can take a "while" before the first message appear
>
> Because of this, I tend to actually like to have the messages printed in
> the console (and since default is FALSE, I don't see it in vignettes unless
> I want to), and was therefore not too happy to see that message() print on
> stderr.
>
> Now, there are many ways of doing it, but as I started this email with, I
> do think there is some value to having a single (a few) paradigms for user
> ease.
>
> Kasper
>
>
>
>> /Henrik
>>
>> >
>> >
>> > H.
>> >
>> >>
>> >> Kasper
>> >>
>> >>
>> >>
>> >>
>> >>>
>> >>> Dan
>> >>>
>> >>>
>>  Just my opinion,
>>  Michael
>> 
>> 
>>  On Wed, Jul 10, 2013 at 8:24 AM, Kasper Daniel Hansen <
>>  kasperdanielhan...@gmail.com> wrote:
>> 
>> > Should I use cat() or message() (or something else) for
>> >if(verbose) cat("my message\n")
>> >
>> > Best,
>> > Kasper
>> >
>> >  [[alternative HTML version deleted]]
>> >
>> > ___
>> > Bioc-devel@r-project.org mailing list
>> > https://stat.ethz.ch/mailman/listinfo/bioc-devel
>> >
>> 
>>   [[alternative HTML version deleted]]
>> 
>>  ___
>>  Bioc-devel@r-proj

Re: [Bioc-devel] best practice: verbose messages

2013-07-11 Thread Kasper Daniel Hansen
On Thu, Jul 11, 2013 at 9:57 AM, Henrik Bengtsson wrote:

> On Wed, Jul 10, 2013 at 9:10 PM, Hervé Pagès  wrote:
> > Hi Kasper,
> >
> >
> > On 07/10/2013 10:50 AM, Kasper Daniel Hansen wrote:
> >>
> >> On Wed, Jul 10, 2013 at 12:38 PM, Dan Tenenbaum 
> >> wrote:
> >>
> >>> On Wed, Jul 10, 2013 at 9:17 AM, Michael Lawrence
> >>>  wrote:
> 
>  If it's an informational message, like one you might log, use
> message().
> >>>
> >>> If
> 
>  you're rendering an object as text, like in a show method, use cat().
> 
> >>>
> >>> Another thing to consider is that messages can be suppressed with
> >>> suppressMessages() but cat() output cannot.
> >>
> >>
> >>
> >> Sure.  What I cannot decide is whether that is good or bad.
> >
> >
> > If you use message(), then you don't need to have a 'verbose' arg since
> > the messages can be suppressed with suppressMessages(). That makes
> > your code simpler/cleaner. However this approach is only appropriate if
> > you want your function to be verbose by default. If you want it to be
> > quiet by default then I don't know what's best. 'verbose' arg + cat() or
> > 'verbose' arg + message() ? That's the question...
>
> You can also imagine different amounts of verbose, so not always TRUE or
> FALSE.
>
> About Kasper's original question, I'd also say use message().  I've
> recently done this transition in several of my packages (mostly via
> the Verbose class in R.utils).  I've thought about this for a long
> time, but what made me do the transition is the fact that many of the
> literate programming tools in R echoes the standard output in code
> chunks, but not the standard errors.  I don't want my verbose/log
> messages to be displayed in reports/vignettes (by default)
>

Henrik (and others),

thanks for your contribution to this, I know you have spent a lot of time
thinking about things like this.

I think it would be nice to try to be somewhat uniform between packages on
this issue, as it is always nice for users to not have every package be
slightly different.

I use verbose messages to inform the user that something is happening, and
for my own (and the user) debugging / analysis optimization. These days I
tend to have most of my slow code running in parallel using mclapply, I
could not (easily) figure out how to have a progress report.  I tend to do
the following
  verbose supports more than one level, but the standard level is 1
equivalent to verbose=TRUE.  Higher levels is really only for extensive
debugging.
  default is always FALSE
  I have started to include "[function name]" in each message, like
"[bumphunterEngine] message", which I find very useful
  many verbose messages include some timing, like "... done in X secs"
which I find very useful for development.
  A given function tend to only have one verbose level, but I then use the
following paradigm
 ... inside some function ...
 subverbose = max(as.integer(verbose) - 1L, 0L)
 helpfunction( ..., verbose = subverbose)
  ie. higher levels of verbose just propogates verbose to sub functions.
  many functions do not have verbose, only stuff that can take a long time
  I only use verbose around the parts of a function that really take a long
time, ie. it can take a "while" before the first message appear

Because of this, I tend to actually like to have the messages printed in
the console (and since default is FALSE, I don't see it in vignettes unless
I want to), and was therefore not too happy to see that message() print on
stderr.

Now, there are many ways of doing it, but as I started this email with, I
do think there is some value to having a single (a few) paradigms for user
ease.

Kasper



> /Henrik
>
> >
> >
> > H.
> >
> >>
> >> Kasper
> >>
> >>
> >>
> >>
> >>>
> >>> Dan
> >>>
> >>>
>  Just my opinion,
>  Michael
> 
> 
>  On Wed, Jul 10, 2013 at 8:24 AM, Kasper Daniel Hansen <
>  kasperdanielhan...@gmail.com> wrote:
> 
> > Should I use cat() or message() (or something else) for
> >if(verbose) cat("my message\n")
> >
> > Best,
> > Kasper
> >
> >  [[alternative HTML version deleted]]
> >
> > ___
> > Bioc-devel@r-project.org mailing list
> > 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
> >>>
> >>>
> >>
> >> [[alternative HTML version deleted]]
> >>
> >> ___
> >> Bioc-devel@r-project.org mailing list
> >> 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 981

Re: [Bioc-devel] best practice: verbose messages

2013-07-11 Thread Henrik Bengtsson
On Wed, Jul 10, 2013 at 9:10 PM, Hervé Pagès  wrote:
> Hi Kasper,
>
>
> On 07/10/2013 10:50 AM, Kasper Daniel Hansen wrote:
>>
>> On Wed, Jul 10, 2013 at 12:38 PM, Dan Tenenbaum 
>> wrote:
>>
>>> On Wed, Jul 10, 2013 at 9:17 AM, Michael Lawrence
>>>  wrote:

 If it's an informational message, like one you might log, use message().
>>>
>>> If

 you're rendering an object as text, like in a show method, use cat().

>>>
>>> Another thing to consider is that messages can be suppressed with
>>> suppressMessages() but cat() output cannot.
>>
>>
>>
>> Sure.  What I cannot decide is whether that is good or bad.
>
>
> If you use message(), then you don't need to have a 'verbose' arg since
> the messages can be suppressed with suppressMessages(). That makes
> your code simpler/cleaner. However this approach is only appropriate if
> you want your function to be verbose by default. If you want it to be
> quiet by default then I don't know what's best. 'verbose' arg + cat() or
> 'verbose' arg + message() ? That's the question...

You can also imagine different amounts of verbose, so not always TRUE or FALSE.

About Kasper's original question, I'd also say use message().  I've
recently done this transition in several of my packages (mostly via
the Verbose class in R.utils).  I've thought about this for a long
time, but what made me do the transition is the fact that many of the
literate programming tools in R echoes the standard output in code
chunks, but not the standard errors.  I don't want my verbose/log
messages to be displayed in reports/vignettes (by default).

/Henrik

>
>
> H.
>
>>
>> Kasper
>>
>>
>>
>>
>>>
>>> Dan
>>>
>>>
 Just my opinion,
 Michael


 On Wed, Jul 10, 2013 at 8:24 AM, Kasper Daniel Hansen <
 kasperdanielhan...@gmail.com> wrote:

> Should I use cat() or message() (or something else) for
>if(verbose) cat("my message\n")
>
> Best,
> Kasper
>
>  [[alternative HTML version deleted]]
>
> ___
> Bioc-devel@r-project.org mailing list
> 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
>>>
>>>
>>
>> [[alternative HTML version deleted]]
>>
>> ___
>> Bioc-devel@r-project.org mailing list
>> 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
>
>
> ___
> Bioc-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/bioc-devel

___
Bioc-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel


Re: [Bioc-devel] best practice: verbose messages

2013-07-10 Thread Hervé Pagès

Hi Kasper,

On 07/10/2013 10:50 AM, Kasper Daniel Hansen wrote:

On Wed, Jul 10, 2013 at 12:38 PM, Dan Tenenbaum  wrote:


On Wed, Jul 10, 2013 at 9:17 AM, Michael Lawrence
 wrote:

If it's an informational message, like one you might log, use message().

If

you're rendering an object as text, like in a show method, use cat().



Another thing to consider is that messages can be suppressed with
suppressMessages() but cat() output cannot.



Sure.  What I cannot decide is whether that is good or bad.


If you use message(), then you don't need to have a 'verbose' arg since
the messages can be suppressed with suppressMessages(). That makes
your code simpler/cleaner. However this approach is only appropriate if
you want your function to be verbose by default. If you want it to be
quiet by default then I don't know what's best. 'verbose' arg + cat() or
'verbose' arg + message() ? That's the question...

H.



Kasper






Dan



Just my opinion,
Michael


On Wed, Jul 10, 2013 at 8:24 AM, Kasper Daniel Hansen <
kasperdanielhan...@gmail.com> wrote:


Should I use cat() or message() (or something else) for
   if(verbose) cat("my message\n")

Best,
Kasper

 [[alternative HTML version deleted]]

___
Bioc-devel@r-project.org mailing list
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




[[alternative HTML version deleted]]

___
Bioc-devel@r-project.org mailing list
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

___
Bioc-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel


Re: [Bioc-devel] best practice: verbose messages

2013-07-10 Thread Martin Morgan
- Kasper Daniel Hansen  wrote:
> On Wed, Jul 10, 2013 at 12:38 PM, Dan Tenenbaum  wrote:
> 
> > On Wed, Jul 10, 2013 at 9:17 AM, Michael Lawrence
> >  wrote:
> > > If it's an informational message, like one you might log, use message().
> > If
> > > you're rendering an object as text, like in a show method, use cat().
> > >
> >
> > Another thing to consider is that messages can be suppressed with
> > suppressMessages() but cat() output cannot.
> 
> 
> Sure.  What I cannot decide is whether that is good or bad.

Michael's point is reflected in the fact that by default message() goes to 
stderr while cat() goes to stdout. And Dan's observation about 
suppressMessages() is that messages are actually conditions that can be 
constructed and managed e.g., by tryCatch(). 

For the output implied by a verbose option, I'd go with message().

Martin

> 
> Kasper
> 
> 
> 
> 
> >
> > Dan
> >
> >
> > > Just my opinion,
> > > Michael
> > >
> > >
> > > On Wed, Jul 10, 2013 at 8:24 AM, Kasper Daniel Hansen <
> > > kasperdanielhan...@gmail.com> wrote:
> > >
> > >> Should I use cat() or message() (or something else) for
> > >>   if(verbose) cat("my message\n")
> > >>
> > >> Best,
> > >> Kasper
> > >>
> > >> [[alternative HTML version deleted]]
> > >>
> > >> ___
> > >> Bioc-devel@r-project.org mailing list
> > >> 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
> >
> 
>   [[alternative HTML version deleted]]
> 
> ___
> Bioc-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/bioc-devel

___
Bioc-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel


Re: [Bioc-devel] best practice: verbose messages

2013-07-10 Thread Dan Tenenbaum
On Wed, Jul 10, 2013 at 10:50 AM, Kasper Daniel Hansen
 wrote:
>
> On Wed, Jul 10, 2013 at 12:38 PM, Dan Tenenbaum  wrote:
>>
>> On Wed, Jul 10, 2013 at 9:17 AM, Michael Lawrence
>>  wrote:
>> > If it's an informational message, like one you might log, use message().
>> > If
>> > you're rendering an object as text, like in a show method, use cat().
>> >
>>
>> Another thing to consider is that messages can be suppressed with
>> suppressMessages() but cat() output cannot.
>
>
> Sure.  What I cannot decide is whether that is good or bad.
>

In terms of being a good citizen, it's good; but sounds like you are
also providing a verbose option that can be turned off (or is off by
default) so that's another path to good citizenship.
However, if your package is at the bottom of a big dependency tree,
the user may not be aware of the package-specific way to suppress
output but they might be aware of suppressMessages().

Up to you
Dan


> Kasper
>
>
>
>>
>>
>> Dan
>>
>>
>> > Just my opinion,
>> > Michael
>> >
>> >
>> > On Wed, Jul 10, 2013 at 8:24 AM, Kasper Daniel Hansen <
>> > kasperdanielhan...@gmail.com> wrote:
>> >
>> >> Should I use cat() or message() (or something else) for
>> >>   if(verbose) cat("my message\n")
>> >>
>> >> Best,
>> >> Kasper
>> >>
>> >> [[alternative HTML version deleted]]
>> >>
>> >> ___
>> >> Bioc-devel@r-project.org mailing list
>> >> 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
>
>

___
Bioc-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel


Re: [Bioc-devel] best practice: verbose messages

2013-07-10 Thread Kasper Daniel Hansen
On Wed, Jul 10, 2013 at 12:38 PM, Dan Tenenbaum  wrote:

> On Wed, Jul 10, 2013 at 9:17 AM, Michael Lawrence
>  wrote:
> > If it's an informational message, like one you might log, use message().
> If
> > you're rendering an object as text, like in a show method, use cat().
> >
>
> Another thing to consider is that messages can be suppressed with
> suppressMessages() but cat() output cannot.


Sure.  What I cannot decide is whether that is good or bad.

Kasper




>
> Dan
>
>
> > Just my opinion,
> > Michael
> >
> >
> > On Wed, Jul 10, 2013 at 8:24 AM, Kasper Daniel Hansen <
> > kasperdanielhan...@gmail.com> wrote:
> >
> >> Should I use cat() or message() (or something else) for
> >>   if(verbose) cat("my message\n")
> >>
> >> Best,
> >> Kasper
> >>
> >> [[alternative HTML version deleted]]
> >>
> >> ___
> >> Bioc-devel@r-project.org mailing list
> >> 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
>

[[alternative HTML version deleted]]

___
Bioc-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel


Re: [Bioc-devel] best practice: verbose messages

2013-07-10 Thread Dan Tenenbaum
On Wed, Jul 10, 2013 at 9:17 AM, Michael Lawrence
 wrote:
> If it's an informational message, like one you might log, use message(). If
> you're rendering an object as text, like in a show method, use cat().
>

Another thing to consider is that messages can be suppressed with
suppressMessages() but cat() output cannot.

Dan


> Just my opinion,
> Michael
>
>
> On Wed, Jul 10, 2013 at 8:24 AM, Kasper Daniel Hansen <
> kasperdanielhan...@gmail.com> wrote:
>
>> Should I use cat() or message() (or something else) for
>>   if(verbose) cat("my message\n")
>>
>> Best,
>> Kasper
>>
>> [[alternative HTML version deleted]]
>>
>> ___
>> Bioc-devel@r-project.org mailing list
>> 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

___
Bioc-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel


Re: [Bioc-devel] best practice: verbose messages

2013-07-10 Thread Michael Lawrence
If it's an informational message, like one you might log, use message(). If
you're rendering an object as text, like in a show method, use cat().

Just my opinion,
Michael


On Wed, Jul 10, 2013 at 8:24 AM, Kasper Daniel Hansen <
kasperdanielhan...@gmail.com> wrote:

> Should I use cat() or message() (or something else) for
>   if(verbose) cat("my message\n")
>
> Best,
> Kasper
>
> [[alternative HTML version deleted]]
>
> ___
> Bioc-devel@r-project.org mailing list
> 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