On 22/02/2009 4:08 PM, Wacek Kusnierczyk wrote:
Peter Dalgaard wrote:
macra...@alum.mit.edu wrote:

<snip>

try(.Internal(unique(quote(hello),NULL,NULL)),silent=TRUE)
hello

I guess it is using the internal equivalent of print rather than the
internal equivalent of stop.

silent=TRUE is a red herring (this has nothing to do with try()).

However, inside do_duplicated (unique.c) we have

    if (!isVector(x)) {
    PrintValue(x);
    error(_("%s() applies only to vectors"),
          (PRIMVAL(op) == 0 ? "duplicated" : "unique"));
    }

This is due to

------------------------------------------------------------------------
r32306 | ripley | 2004-12-23 22:06:27 +0100 (Thu, 23 Dec 2004) | 2 lines

Apparently unique/duplicated are supposed to work on NULL, despite
their help!

...which makes little sense to explain the PrintValue(x). I suspect
this is a debugging printout that was inadvertently left in.

hmm, why wouldn't you use something like

    DEBUG(x)

with DEBUG being a macro defined so that it's replacement is void unless
a specific flag or environment variable is set specifically for the
purpose of debugging?  you would then avoid confusing users' code just
because one PrintValue has been inadvertently left in the sources.

But then we'd confuse developers, who would see a huge dump of messages
from every other debugging session, when they just wanted to see their own, and who would be forced to wade through leftover never-used DEBUG(x) calls in code when they were reading the source.

This is not a common error: as far as I know, there are no other unintentional PrintValue calls anywhere in the source. So I think the current system (just take them out before committing) is working.

Duncan Murdoch

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to