[R] Precedence and parentheses
     (Ted Harding) 
    Ted.Harding at wlandres.net
       
    Tue May  6 20:41:17 CEST 2014
    
    
  
On 06-May-2014 18:09:12 Göran Broström wrote:
> A thread on r-devel ("Historical NA question") went (finally) off-topic, 
> heading towards "Precedence". This triggered a question that I think is 
> better put on this list:
> 
> I have been more or less regularly been writing programs since the 
> seventies (Fortran, later C) and I early got the habit of using 
> parentheses almost everywhere, for two reasons. The first is the 
> obvious, to avoid mistakes with precedences, but the second is almost
> as important: Readability.
> 
> Now, I think I have seen somewhere that unnecessary parentheses in  R 
> functions may slow down execution time considerably. Is this really 
> true, ant should I consequently get rid of my faiblesse for parentheses?
> Or are there rules for when it matters and doesn't matter?
> 
> Thanks, Göran
I have much sympathy with your motives for using parentheses!
(And I have a similar computing history).
My general encouragement would be: continue using them when you
feel that each usage brings a benefit.
Of course, you would avoid silliness like
  x <- (1*(2*(3*(4*(5)))))
and indeed, that does slow it down somewhat (it takes about twice
as long as a <- 1*2*3*4*5):
  system.time(for(i in (1:10000)) 1*2*3*4*5)
#  user  system elapsed 
# 0.032   0.000   0.032 
  system.time(for(i in (1:10000)) (1*(2*(3*(4*(5))))))
#  user  system elapsed 
# 0.056   0.000   0.054 
The main reason, I suppose, is that a "(" forces a new level
on a stack, which is not popped until the matching ")" arrives.
Interestingly, the above silliness takes a little longer when
the nesting is the other way round:
  system.time(for(i in (1:10000)) 1*2*3*4*5)
#  user  system elapsed 
# 0.028   0.000   0.029 
  system.time(for(i in (1:10000)) (((((1)*2)*3)*4)*5) )
#  user  system elapsed 
#  0.052   0.000   0.081 
(though in fact the times are somwhat variable in both cases,
so I'm not sure of the value of the relationship).
Best wishes,
Ted.
-------------------------------------------------
E-Mail: (Ted Harding) <Ted.Harding at wlandres.net>
Date: 06-May-2014  Time: 19:41:13
This message was sent by XFMail
    
    
More information about the R-help
mailing list