[Rd] 'unique' error message is printed despite silent=TRUE (PR#13547)
Duncan Murdoch
murdoch at stats.uwo.ca
Sun Feb 22 22:18:55 CET 2009
On 22/02/2009 4:08 PM, Wacek Kusnierczyk wrote:
> Peter Dalgaard wrote:
>> macrakis at 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
More information about the R-devel
mailing list