From maechler at stat.math.ethz.ch  Wed Aug 23 09:10:20 2017
From: maechler at stat.math.ethz.ch (Martin Maechler)
Date: Wed, 23 Aug 2017 09:10:20 +0200
Subject: [Rd] Possible repeat{} / break function bug in R 3.4.1
In-Reply-To: <1f22e392cb594b52ac3907d9f79992dd@MEX2.metro-region.org>
References: <1f22e392cb594b52ac3907d9f79992dd@MEX2.metro-region.org>
Message-ID: <22941.10844.382587.277767@stat.math.ethz.ch>

>>>>> Peter Bosa <Peter.Bosa at oregonmetro.gov>
>>>>>     on Tue, 22 Aug 2017 14:39:50 +0000 writes:

    > Hello, I've noticed the following error using repeat{} / break in R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit environments).
    > When running a repeat function, the break command causes an error message if the repeat command refers to code within a file, but does not produce an error if the code is contained within the repeat{} command.

  > Hello, I've noticed the following error using repeat{} / break in R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit environments).
  > 
  > When running a repeat function, the break command causes an error message if the repeat command refers to code within a file, but does not produce an error if the code is contained within the repeat{} command.
  > 
  > For example, the following code runs fine:
  > 
  > x <- 1
  > y <- 5
  > 
  > repeat {
  >   if(x < y) {
  >     print("No Break Dance :-(")
  >     x = x + 1
  >   } else {
  >     print("Break Dance!")
  >     break
  >   }
  > }
  > 
  > [1] "No Break Dance :("
  > [1] "No Break Dance :("
  > [1] "No Break Dance :("
  > [1] "No Break Dance :("
  > [1] "No Break Dance :("
  > [1] "Break Dance!"
  > >
  > 
  > However, if I take the loop contents of the repeat{} function, and save them to a file (breakTest.R) that contains the following:
  > 
  > if(x < y) {
  >   print("No Break Dance :-(")
  >   x = x + 1
  > } else {
  >   print("Break Dance!")
  >   break
  > }
  > 
  > And then run the following code:
  > 
  > x <- 1
  > y <- 5
  > 
  > repeat{
  >   source("./breakTest.R")
  > }
  > 
  > I get the following error:
  > 
  > [1] "No Break Dance :("
  > [1] "No Break Dance :("
  > [1] "No Break Dance :("
  > [1] "No Break Dance :("
  > [1] "No Break Dance :("
  > [1] "Break Dance!"
  > Error in eval(ei, envir) : no loop for break/next, jumping to top level
  > >
  > 
  > This was not an issue with previous versions of R that I have used, including 3.3.3.
  > 
  > Any suggestions? Is this a known bug with 3.4.1?

Thank you, Peter!

I can confirm what you are seeing (on Linux) in R version 3.4.0,
3.4.1, and "R devel", and also that this had worked w/o a
problem in earlier versions of R, where I've looked at
R version 3.3.3 and 3.2.5.

I do think this is a bug, but it was not known till now.

For ease of use, I attach the two R files to easily reproduce.
Note I use  writeLines() instead of print() as its output is "nicer".

Best regards,
Martin Maechler, ETH Zurich




[Rd] Possible repeat{} / break function bug in R 3.4.1
Martin Maechler