Re: [Bioc-devel] best practice: verbose messages
On Thu, Jul 11, 2013 at 9:57 AM, Henrik Bengtsson h...@biostat.ucsf.eduwrote: On Wed, Jul 10, 2013 at 9:10 PM, Hervé Pagès hpa...@fhcrc.org 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 dtene...@fhcrc.org wrote: On Wed, Jul 10, 2013 at 9:17 AM, Michael Lawrence lawrence.mich...@gene.com 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 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 [[alternative HTML version
Re: [Bioc-devel] best practice: verbose messages
On Thu, Jul 11, 2013 at 11:01 AM, Kasper Daniel Hansen kasperdanielhan...@gmail.com wrote: On Thu, Jul 11, 2013 at 9:57 AM, Henrik Bengtsson h...@biostat.ucsf.eduwrote: On Wed, Jul 10, 2013 at 9:10 PM, Hervé Pagès hpa...@fhcrc.org 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 dtene...@fhcrc.org wrote: On Wed, Jul 10, 2013 at 9:17 AM, Michael Lawrence lawrence.mich...@gene.com 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-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
[Bioc-devel] best practice: verbose messages
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
Re: [Bioc-devel] best practice: verbose messages
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
Re: [Bioc-devel] best practice: verbose messages
On Wed, Jul 10, 2013 at 9:17 AM, Michael Lawrence lawrence.mich...@gene.com 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
On Wed, Jul 10, 2013 at 10:50 AM, Kasper Daniel Hansen kasperdanielhan...@gmail.com wrote: On Wed, Jul 10, 2013 at 12:38 PM, Dan Tenenbaum dtene...@fhcrc.org wrote: On Wed, Jul 10, 2013 at 9:17 AM, Michael Lawrence lawrence.mich...@gene.com 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
Hi Kasper, On 07/10/2013 10:50 AM, Kasper Daniel Hansen wrote: On Wed, Jul 10, 2013 at 12:38 PM, Dan Tenenbaum dtene...@fhcrc.org wrote: On Wed, Jul 10, 2013 at 9:17 AM, Michael Lawrence lawrence.mich...@gene.com 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