[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