From luke at stat.uiowa.edu  Tue Jun  2 17:28:20 2009
From: luke at stat.uiowa.edu (luke at stat.uiowa.edu)
Date: Tue, 2 Jun 2009 10:28:20 -0500 (CDT)
Subject: [Rd] reference counting bug: overwriting for loop 'seq' variable
In-Reply-To: <77EB52C6DD32BA4D87471DCD70C8D7000147B6C7@NA-PA-VBE03.na.tibco.com>
References: <77EB52C6DD32BA4D87471DCD70C8D7000147B6C7@NA-PA-VBE03.na.tibco.com>
Message-ID: <alpine.LFD.2.00.0906021027470.7161@nokomis.stat.uiowa.edu>

Thanks for the report.  Should be fixed in teh devel and 2.9 branches.

luke

On Mon, 1 Jun 2009, William Dunlap wrote:

> 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
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

-- 
Luke Tierney
Chair, Statistics and Actuarial Science
Ralph E. Wareham Professor of Mathematical Sciences
University of Iowa                  Phone:             319-335-3386
Department of Statistics and        Fax:               319-335-3017
    Actuarial Science
241 Schaeffer Hall                  email:      luke at stat.uiowa.edu
Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu



[Rd] reference counting bug: overwriting for loop 'seq' variable
luke at stat.uiowa.edu