[Rd] Bug in the parser (?) (PR#13504)

Peter Dalgaard P.Dalgaard at biostat.ku.dk
Thu Feb 5 15:14:37 CET 2009


johnc.deva at yahoo.com wrote:
> Full_Name: John C. Deva
> Version: 2.8.1
> OS: Fedora Linux 8, 64 bit
> Submission from: (NULL) (193.200.150.189)
> 
> 
> I notice that it is possible to redefine 'if' as a function of an arbitrary
> number of arguments.  Such redefined 'if' can then be used as any other user
> function, except for that the parser still demands exactly three arguments to be
> given to if.  Furthermore, even if 'if' is defined with three arguments, its
> application must still be made with the original syntax, and not the usual
> syntax of function application:
> 
>> `if` <- function(a,b,c) 
> + {
> + assign(deparse(substitute(a)), b+c, envir=parent.frame()
> + }
> 
>> if (x) 1 else 2
>> x
> [1] 3
> 
>> if(x, 1, 2)
> Error: unexpected ',' in "if(x,"
> 
> The later expression above should be the only valid when 'if' is redefined as
> above, but it is not the case.


A bug report with a ? in the title is in general ill-advised. If you are
not sure that something is a bug, then ask a question instead.

In this case, no, it is not a bug. Syntax is syntax and "if(x,1,2)" is a
syntax error no matter how if() is defined. Parsing is controlled by the
fact that "if" is a keyword, the function definition is not used at all
at that stage. `if`(x,1,2) works perfectly well, though, at least until
you try deparsing it:

> quote(`if`(x,1,2))
if (x) 1 else 2


Redefining "if" is a really Bad Idea, excepting things like code
analysis tools (which I believe are the main reason it is not explicitly
forbidden).


-- 
   O__  ---- Peter Dalgaard             Øster Farimagsgade 5, Entr.B
  c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
 (*) \(*) -- University of Copenhagen   Denmark      Ph:  (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)              FAX: (+45) 35327907



More information about the R-devel mailing list