[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