Skip to content
Back to formatted view

Raw Message

Message-ID: <77EB52C6DD32BA4D87471DCD70C8D7000147B6C7@NA-PA-VBE03.na.tibco.com>
Date: 2009-06-02T01:45:33Z
From: William Dunlap
Subject: 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