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