Bug in the parser (?) (PR#13504)
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