Skip to content
Prev 32854 / 63424 Next

reference counting bug: overwriting for loop 'seq' variable

It looks like the 'seq' variable to 'for' can be altered from
within the loop, leading to incorrect answers.  E.g., in
the following I'd expect 'sum' to be 1+2=3, but R 2.10.0
(svn 48686) gives 44.5.

   > x = c(1,2);  sum = 0; for (i in x) { x[i+1] = i + 42.5; sum = sum +
i }; sum
   [1] 44.5
or, with a debugging cat()s,
   > x = c(1,2);  sum = 0; for (i in x) { cat("before, i=", i, "\n");
x[i+1] = i + 42.5; cat("after, i=", i,"\n"); sum = sum + i }; sum
   before, i= 1
   after, i= 1
   before, i= 43.5
   after, i= 43.5
   [1] 44.5
 
If I force the for's 'seq' to be a copy of x by adding 0 to it, then I
do get the expected answer.

   > x = c(1,2);  sum = 0; for (i in x+0) { x[i+1] = i + 42.5; sum = sum
+ i }; sum
   bbbbb[1] 3

It looks like an error in reference counting. 

Bill Dunlap
TIBCO Software Inc - Spotfire Division
wdunlap tibco.com