[R] R multiline expression grief
Thomas Lumley
tlumley at u.washington.edu
Fri Mar 13 14:18:23 CET 2009
On Fri, 13 Mar 2009, Paul Suckling wrote:
> Dear all.
>
> After much grief I have finally found the source of some weird
> discrepancies in results generated using R. It turns out that this is
> due to the way R handles multi-line expressions. Here is an example
> with R version 2.8.1:
>
> ----------------------------------------------------
> # R-script...
>
> r_parse_error <- function ()
> {
> a <- 1;
> b <- 1;
> c <- 1;
> d <- a + b + c;
> e <- a +
> b +
> c;
> f <- a
> + b
> + c;
> cat('a',a,"\n");
> cat('b',b,"\n");
> cat('c',c,"\n");
> cat('d',d,"\n");
> cat('e',e,"\n");
> cat('f',f,"\n");
> }
> ----------------------------------------------------
>> r_parse_error();
> a 1
> b 1
> c 1
> d 3
> e 3
> f 1
> ----------------------------------------------------
>
> As far as I am concerned f should have the value 3.
That is most unfortunate for you.
> Is this behaviour a bug?
No.
> If not, is it
> possible to get R to generate a warning that several lines of an
> expression are potentially being ignored, perhaps by turning on a
> strict mode which requires the semi-colons?
No.
R is not ignoring several lines of an expression.
f <- a
+ b
+ c;
is three perfectly legitimate expressions over three lines. R evaluates
f<-a
then evaluates
+b
then evaluates
+c
For people who like semicolons, it's the same as if you had
f <- a;
+b;
+c;
The semicolons are just an alternative to a newline, so a semicolon at the end of a line is purely cosmetic. Modifying the parser to require a semicolon to terminate a statement would break essentially every piece of R code and documentation in existence, so it's probably easier to change your house style.
You could fairly easily write a tool that parsed your scripts and checked that all your expressions were either assignments or function calls and that the top-level expressions did not include unary plus or minus.
-thomas
Thomas Lumley Assoc. Professor, Biostatistics
tlumley at u.washington.edu University of Washington, Seattle
More information about the R-help
mailing list